1

PE ファイルを生成するために、C# アプリケーションでアンマネージ DLL mscorpe.dll から CreateICeeFileGen() 関数をインポートしています。この関数は、ここで定義された C++ オブジェクトへのポインターを返します。C# を介してこのクラスのフィールドにアクセスする方法はありますか? またはアンマネージ ラッパー DLL を記述する必要がありますか?

私が現在使用しているコードは次のとおりです:-

[DllImport(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorpe.dll", EntryPoint = "CreateICeeFileGen")]
static extern void CreateICeeFileGen(out IntPtr iceeFileGenPointer);
...
IntPtr filePtr;
CreateICeeFileGen(out filePtr);    

NB : .net ライブラリで同様のことができることはわかっていますが、目的のためにアンマネージ ライブラリを使用する必要があります。

4

2 に答える 2

2

C# からクラスを使用できるようにするには、ラッパー ライブラリが必要です。

最善の策は、C++/CLI を使用してラッパーを作成することです。これにより、アンマネージ関数を直接呼び出して、マネージ クラスで詳細を公開できます。これにより、何に対しても P/Invoke を使用する必要がなくなります。

(まあ、技術的には、クラス レイアウトを知っていれば、フィールドにアクセスするためにポインター演算をいじることができますが、これは非常に壊れやすく、面倒です。この方法で仮想関数を呼び出そうとすると、非常に見苦しくなります)。

于 2008-10-13T14:19:39.760 に答える
0

COM クラス/インターフェイスのように見えます。代わりに COM だけを使用することはできませんか?

于 2008-10-13T14:24:07.787 に答える