ありがとうございました。Interop C#/ Cの問題:AccessViolationException
iがCでこの些細な機能を有する:
__declspec(dllexport) Point* createPoint (int x, int y) {
Point *p;
p = (Point*) malloc(sizeof(Point));
p->x = x;
p->y=y;
return p;
}
ポイントは、二つのintフィールド、xとyとの非常にシンプルな構造体です。
私はこの機能をC#から呼びたいと思います。
私はこのコードを使用します
[DllImport("simpleC.dll", EntryPoint = "createPoint", CallingConvention = CallingConvention.Cdecl, SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.LPStruct)]
public static extern Point createPoint(int x, int y);
Point p = Wrapper.createPoint(1, 2);
をしかし、実行時に、私はAccessViolationException
を持っています。詳細は例外を見て、私は例外がMarshal.CoTaskMemFree(IntPtr)
メソッドからスローされることを発見した。
この方法では、C mallocによって割り当てられたメモリを解放できないようです。
私は間違っていますか?
本当にありがとうございます。
ありがとうございます、あなたは私に何か考えてください!私の本当の目標は、正規表現用のpcre CライブラリをC#に統合することです)、mallocとsructポインタが返されます。 私は2番目の解決策を使用していますが、動作しますが、ハードな空きメモリ(C関数のデオロケータを記述する必要があります)ですが、2番目の方法が好きです。どうもありがとう! –