最後に、記事が提起した問題:多くの方法がある場合は、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
説明:操作中には、ご質問、ご意見の議論を持っている、間違っては容易ではありません、修正するために歓迎!オリジナルの記事、複製、ソースを明記してください、ありがとうございました!