新しい C# アプリケーションで使用したいいくつかの既存の C++ クラス (メソッドと #define 定数、およびいくつかの追加の C スタイル関数を含む) があります。これを行う最善の方法は何ですか?すべてを1つのexeにリンクしたいので、可能であればDLLはなく、クラスライブラリにリンクするだけです。
これを行う最善の方法は何ですか?それはかなり簡単ですか、それとも元のコードを C# に移植したほうがよいでしょうか?
私の知る限り、コードをプロジェクト/ソリューションに入れたい場合は、コードを C++/CLI に変換するのが最善の策かもしれません。
これらの C++ コードを外部ライブラリとして呼び出すだけの場合は、P/Invoke を使用できます。しかし、それに関する私の経験は苦痛でした。かなり些細なことを除けば、学習曲線は急勾配です。しかし、あなたを助けることができるSO(Hans Passantのような)の主題に関して本当に知識のある人々がいます.
もちろん、C# ですべてを書き直すオプションは常にあります。
PInvoke/DLLIMPORTを使用して、C, C++
.
更新 1 :
C 関数の呼び出しには成功しましたが、C++ クラス/メソッドの呼び出しには成功しませんでした。
これを行うには、Managed C++ を使用する必要があります。 この記事は役立つはずです..
更新 2 : で提案されているように再配置しDavid
ます。
純粋な C スタイルの実装では、 を使用できますP/Invoke
。LibGit2Sharpプロジェクトを使用できる参照。でネイティブを消費C.exe
しC#
ます。ネイティブメソッドDllImport
の呼び出しは次のとおりです
注:ここでは、 を出荷する必要がありますexe
。他の .Net アセンブリにコンパイルすることはできません。