und danke im Rat für jede Hilfe.Problem mit Interop C#/C: AccessViolationException
i haben diese triviale Funktion in C:
__declspec(dllexport) Point* createPoint (int x, int y) {
Point *p;
p = (Point*) malloc(sizeof(Point));
p->x = x;
p->y=y;
return p;
}
Punkt ist eine sehr einfache Struktur mit zwei Feldern int, x und y.
Ich möchte diese Funktion von C# aufrufen.
Ich benutze diesen Code:
[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);
aber zur Laufzeit habe ich eine AccessViolationException
. Beobachten Ausnahme im Detail, fand ich, dass Ausnahme von Marshal.CoTaskMemFree(IntPtr)
Methode geworfen wird.
Es scheint, dass diese Methode den von C malloc zugewiesenen Speicher nicht freigeben kann.
Was mache ich falsch?
Wirklich danke.
Dank vielen, klären Sie mich irgendwelche denken! Mein eigentliches Ziel ist die Integration von pcre C library für regulären Ausdruck in C#, dann gibt es eine Menge o malloc und sruct pointer. Jetzt benutze ich zweite Lösung, es funktioniert, aber es ist hart freier Speicher (ich sollte C Funktionen deallocator schreiben), aber ich mag die zweite, und werde es implementieren! Danke vielmals! –