0

このシグネチャを持つメソッドを含む C++ dll を使用しています。

int GetEnumerationString(int type, int value, const char** s ); /* ALLOCATES */

ヘッダーのコメントで述べたように、メソッドはポインターを割り当てます。C# で次の署名を試しました。

[DllImport("thedll.dll", EntryPoint="GetEnumerationString")]
private static extern int GetEnumerationString(int type, int value, ref string s );

しかし、プログラムを実行すると、AccessViolationException.

メソッドの正しい署名は何ですか?

4

1 に答える 1

1

アンマネージ関数がバッファーを割り当てる場合、CLRがメモリーを取得し、必要に応じて解放するために、CLRアロケーターを使用する必要があります。

それが不可能な場合は、ポインタを返す必要があります。

[DllImport("thedll.dll", EntryPoint="GetEnumerationString")]
private static extern int GetEnumerationString(int type, int value, out IntPtr s);

次に、手動で文字列を計算し、ポイントされたメモリを破棄します(アロケータが何であるかを知っている必要があります)。

于 2012-07-25T09:08:58.203 に答える