и спасибо за совет за любую помощь.
У меня есть эта тривиальная функция в 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.
Что я делаю не так?
Действительно, спасибо.