0

C++ で作成された DLL を C# にインポートする際に、一般的な質問があります。

1) ダブル ポインター、ポインターの配列などのポインターを使用する C++ 関数を作成しましstatic int someFunc(char *var[]) た。

2) C# で [DllImport()] を介してすべての関数を公開する必要がありますか? つまり、内部で他の関数を呼び出す someFunc という関数があります。これらの関数も「DllImport」の下に公開する必要があります

3) 特に C++ から dll をインポートするときに、C# でアンマネージ コードを処理する必要がある理由を誰か説明してもらえますか?

4

2 に答える 2

1

ポイント1回答:C#の関数宣言でunsafeキーワードを使用してください

static unsafe int someFunc(char* var[]);

ポイント2回答:すべての関数をインポートする必要はありません。someFunc()のみをインポートする

ポイント3の回答:C#は、タイプセーフで有効なメモリ位置を参照するマネージコードを使用しています。ただし、C ++のようなポインタは、有効なメモリ位置を参照する場合と参照しない場合があります。したがって、C#でアンマネージコードを処理する必要があります。

于 2012-06-14T10:41:29.100 に答える
0

C# は安全でない領域でのポインターをサポートしていますが、C++ の void* DllImport に似た IntPtr をパラメーターまたは戻り値として使用することもできます。

ただし、正しいことは、マーシャリングを使用して char* を System.String に、またはその逆に自動的に変換することです。(そして、 char* の配列を string の配列に変換します。)

于 2012-06-14T10:48:44.287 に答える