C#のC ++(高度章)呼び出す方法

最後に、記事が提起した問題:多くの方法がある場合は、C ++ライブラリは申告が必要ですか?これは、多くのコードを記述しないですか?そして、見られるもののオファーを示唆する知性がありません。

図は次のとおりです。

 

 あなたはこのよう呼び出し中に友人が必要ですが、使用する方法がわからない場合は、私の以前の記事を参照してください。

これらの問題に対応して、必要なリファレンスの友人のために要約レコードのコースインチ

キー:C#のC ++を呼び出すことによって達成CLI

記事を読んだ後、私はあなたが意志と信じて、それがステップ動作によるステップを望んでいます。

まず、新しいnetcoreコンソールアプリケーションを作成します。

これは、私たちがCを呼び出すために使用されるテストです++

 

 

第二に、C ++空のプロジェクトを作成します

図:

 

 プロジェクトが作成され、私たちはクラスを追加し、ここではいくつかの方法を書くには、電卓、それを書くための簡単な算数です!

CaculateData.h次のコードは、いくつかの関数宣言の定義を追加します。

 

書式#include <stdio.hに> 
する#include <stdlib.h>に含ま
する#include <iostreamの> 

の#ifdef CaculateDLL_EXPORTS 
の#define Calculate_EXPORTS __declspec(のdllexport)
 の#else 
の#define Calculate_EXPORTS __declspec(dllimportの)
 #endifの

はextern  " C " Calculate_EXPORTSは、int型の追加(int型 numberA 、int型のnumberB)。

extern  " C " Calculate_EXPORTSはint型(減算をINT numberA、INT numberB)。

extern  " C " Calculate_EXPORTSint型乗算(int型 numberA、int型numberB)。

extern  " C " Calculate_EXPORTSは   int型(分割INT numberA、INT numberB)。

クラスCaculateData 
{ 
パブリック
    CaculateData(); 
    CaculateData(); 

}。

 

私たちは、マクロのifdef#が定義されていない、見ることができますので、私たちは、マクロを追加する必要があります。

プロジェクトを右プロパティ--- --- ---構成プロパティC / C ++ --- ---プリプロセッサプリプロセッサの定義、マクロ定義は、それに追加されます。

 

あなたは色が紫色になり、明確に定義され、見ることができ、それはマクロを宣言していたことを説明しました。

CaculateData.cppでこれを達成するためのいくつかの方法。

#include " CaculateData.h " 
の#include <iostreamの> 

CaculateData :: CaculateData()
{ 
} 


CaculateData ::CaculateData()
{ 
} 

Calculate_EXPORTS int型追加(int型 numberA、int型numberB)
{ 
    返す numberA + numberBを。
} 

Calculate_EXPORTSはint型減算(INT numberA、INT numberB)
{ 
    戻り numberAを- numberBします。
} 

Calculate_EXPORTSはint型(乗算をint型 numberA、int型numberB)
{ 
    返す numberA * numberBを。
} 

Calculate_EXPORTSはint型(分割INT numberA、INT numberB)
{ 
    場合(numberB == 0 ){ 
        のstd :: COUT << " 除数不能为空" << はstd :: ENDLと、
    } 
    戻り numberA / numberBと、
}

 

CLIの参照を容易にするために、主に、ここでは出力ディレクトリTestinvokingプロジェクトを定義することに同意するものとし、.. \デバッグ\ binに\ netcoreapp2.2ここでは、C ++プロジェクトの出力ディレクトリを変更します。

(変更の手順:右プロジェクト - プロパティ - 構成プロパティ - 全般 - 出力ディレクトリ)

次のように構成タイプは、改正:動的ライブラリは.dllを

(変更ステップ:右プロジェクト - プロパティ - 構成プロパティ - 全般 - タイプの構成)

 そして、生成します。

結果は以下の通りである:あなたは、ログがプリントアウトされ、見る私たちは成功を発生させることができます。

 

 対応を見て、ディレクトリ、だけでなく、OK

 

第三に、新しいCLRプロジェクトを作成します

このプロジェクトは、C ++、C#の呼び出しで実装されます

Caculate.dllを呼び出す必要があるので、我々はそれを参照する必要があります。

構成プロパティ-VC ++ディレクトリ - ライブラリカタログ(追加だけでパスCaculate.dllに生成されました)

 

 一方、リファレンスライブラリ:

 

 Caculate.dllのメソッドを呼び出すためにそれを使用して、クラスInvokeCon.cppを追加

 次のようにInvokeCon.cppコードは次のとおりです。

#include " InvokeCon.h " 

InvokeCon :: InvokeCon()
{ 
} 

INT InvokeCon :: AddCli(INT numberA、INT numberB)
{ 
    リターン(numberA、numberB)を加えます。
} 

INT InvokeCon :: SubtractCli(INT numberA、INT numberB)
{ 
    戻り減算(numberA、numberB)。
} 

INT InvokeCon :: MultiplicationCli(INT numberA、INT numberB)
{ 
    戻り乗算(numberA、numberB)を、
} 

int型 InvokeCon :: DividedCli(INT numberA、INT numberB)
{ 
    リターン分割(numberA、numberB)。
}

InvokeCon.hコード:

#pragma

の#include <入出力ストリーム> 
の#include " C:\ユーザー\ tjy \ソース\レポ\ TestInvoking \ Caculate \ CaculateData.h " //引用库声明对应文件路径
公共 のREF  クラスInvokeCon 
{ 
パブリック
    InvokeCon(); 

    int型 AddCli(int型 numberA、int型numberB)。
    int型 SubtractCli(int型 numberA、int型numberB)。
    int型 MultiplicationCli(int型 numberA、int型numberB)。
    int型 DividedCli(int型 numberA、int型numberB); 
}。

 

その後、コンパイル、コンパイル時の型ダイナミックライブラリDLLを変更

 

 そして、生成します。この時点でCliDll.dllライブラリーを生じ

 

四、#は参照を通じてCaculateメソッドを呼び出すためにC CliDll.dll

1、DLLへの参照を追加します。

2、C#プロジェクトでテストコードを追加します。

あなたは、あなたが複数のメソッドを呼び出すことができ、それを見ることができますが、メソッド名は、プロンプトが表示されます!

使用してシステムを、

名前空間TestInvoking 
{ 
    パブリック クラスプログラム
    { 
        公共の 静的な 無効メイン(文字列[] argsを)
        { 
            試み
            { 
                Console.WriteLineを(" --------- C#C ++クラスメソッドは、CLIで呼び出します------ --- " ); 
                Console.Writeは(" numberAを入力してください:" );
                 int型 numberA = Convert.ToInt32(Console.ReadLine()); 
                Console.Write(" numberBを入力してください:" );
                 int型numberB = Convert.ToInt32(Console.ReadLine())。

                起動InvokeCon = 新しい)(InvokeConします。
                INT addResult = invoke.AddCli(numberA、numberB)。
                INT subResult = invoke.SubtractCli(numberA、numberB)。
                INT mutilResult = invoke.MultiplicationCli(numberA、numberB)。
                INT divResult = invoke.DividedCli(numberA、numberB)。

                Console.WriteLineを($ " {numberA}と{numberB}和である:{addResult};サブある:{subResult}; Mutilである:{mutilResult}; divがある:{divResult} " )。
            }
            キャッチ(例外例)
            { 
                Console.WriteLineを($ " EX:{EX} " ); 
            } 

            Console.WriteLineを(" 执行成功" )。
            Console.ReadLine(); 
        } 
    } 
}

 OK、完了するために!

コードはgithubの上で置かれている、この記事では、簡単なデモで、友人が見ることができる必要があります。

githubの住所:https://github.com/tomorrowGooddays/Invoke

説明:操作中には、ご質問、ご意見の議論を持っている、間違っては容易ではありません、修正するために歓迎!オリジナルの記事、複製、ソースを明記してください、ありがとうございました!

おすすめ

転載: www.cnblogs.com/skyfreedom/p/11783629.html