0

DLL に変換した C コードがいくつかあります。C# プログラムから DLL を呼び出す必要があります。「保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。」というエラーが表示されます。

したがって、関数プロトタイプを正しく変換していないため、メモリリークが発生していると思います。

C の関数プロトタイプは

int __stdcall karacell_bridge( int argumentCount, char **argContent)

これは、C# DLL 呼び出しでの関数プロトタイプの正しい変換ですか?

[DllImport("KaracellLib.dll", EntryPoint = "karacell_bridge@8", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true)]
public static extern int karacell_bridge(int argumentCount, [In, Out]string[] argContent);
4

1 に答える 1

0

いいえ、2 番目の引数をマーシャリングする必要があります。変更可能な文字列の配列をマーシャリングする安全な PInvoke の方法があるかどうかはわかりません。ここには多くの失敗モードがあるようです。おそらく、文字列の配列を の配列に変換してみてくださいchar *

于 2013-02-20T05:53:13.983 に答える