C#などの.NET言語内から、コードライブラリファイル(.dll)としてコンパイルされたC ++コードを呼び出すことは可能ですか?
具体的には、RakNetネットワークライブラリなどのC ++コード。
C#などの.NET言語内から、コードライブラリファイル(.dll)としてコンパイルされたC ++コードを呼び出すことは可能ですか?
具体的には、RakNetネットワークライブラリなどのC ++コード。
回答:
C ++を呼び出す簡単な方法の1つは、C ++ / CLIでラッパーアセンブリを作成することです。C ++ / CLIでは、ネイティブコードを記述しているかのようにアンマネージコードを呼び出すことができますが、C#で記述されているかのようにC#からC ++ / CLIコードを呼び出すことができます。この言語は基本的に、「キラーアプリ」として既存のライブラリへの相互運用を使用して設計されました。
たとえば、これを/ clrスイッチでコンパイルします
#include "NativeType.h"
public ref class ManagedType
{
NativeType* NativePtr;
public:
ManagedType() : NativePtr(new NativeType()) {}
~ManagedType() { delete NativePtr; }
void ManagedMethod()
{ NativePtr->NativeMethod(); }
};
次に、C#で、ManagedTypeアセンブリへの参照を追加し、次のように使用します。
ManagedType mt = new ManagedType();
mt.ManagedMethod();
より説明された例については、このブログ投稿をチェックしてください。
P / Invokeは優れたテクノロジであり、ターゲットDLLファイルのロードの問題を除いて、かなりうまく機能します。物事を行うための最良の方法は、ネイティブ関数の静的ライブラリを作成し、それに依存するマネージC ++(またはC ++ / CLI)プロジェクトにリンクすることであることがわかりました。
確かにそうです。この記事は、これを始めるためにできることの良い例です。
これは、Windows MobileデバイスのC#からP / Invokeを使用して行います。
これを行うために使用されるテクノロジーは、P / Invokeと呼ばれます。あなたは主題に関する記事を検索することができます。これは、C ++ではなくC#からCを呼び出すためのものであることに注意してください。したがって、DLLがエクスポートするCラッパーでC ++コードをラップする必要があります。