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はNiceテクノロジーであり、ターゲットDLLファイルをロードする際の問題を除いて、かなりうまく機能します。ネイティブ関数のリストを作成し、それに依存するManaged C++(またはC++/CLI)プロジェクトにリンクします。
これを行うために使用される技術は P/Invoke ;と呼ばれます。そのテーマに関する記事を検索できます。これは、C++ではなくC#からCを呼び出すためのものです。そのため、C++コードをDLLエクスポートするCラッパーにラップする必要があります。