имам външен dll (с C++ документация за това как да го използвам) и трябва да използвам някои функции вътре в него от моята C# програма.
Написах малка обвивка за някои функции и те работят добре, но не знам как да обвивам функции, които се нуждаят от указател на функция като параметър.
C++ документацията казва:
uint NativeFunction(uint32 parameter, GenericFunction *func)
Тъй като GenericFunction
трябва да получи 2 *char като параметри, написах това на C#:
public struct GenericFunction
{
public string param1;
public string param2;
}
[DllImport("externalLib.dll", SetLastError = true)]
public static extern uint NativeFunction(uint parameter, GenericFunction func);
И когато трябва да го извикам, използвам
GenericFunction test = new GenericFunction();
uint result = NativeFunction(0u, test);
с това имам тази грозна грешка:
Опит за четене или запис на защитена памет. Това често е индикация, че друга памет е повредена.
Почти съм сигурен, че извиквам функцията по грешен начин, тъй като все още трябва да дефинирам какво прави GenericFunction
, но нямам представа как да го направя и google не ми помага този път!