Я должен использовать неуправляемую DLL (написанную на C) в моем приложении C #.В этой DLL у меня есть структура:
typedef struct {
void (*Func1)(void*, int*);
void (*Func2)(void*, int*);
} myStructure;
и у меня есть функция, которая использует эту структуру в качестве параметра [in / out]:
void functionInterface(myStructure* pToStruct);
в C #, я перевожу этоструктура как:
[StructLayout(LayoutKind.Sequential)]
public unsafe struct myStructure
{
//defining delegate instances
public func1 Func1;
public func2 Func2;
...
//defining delegate types
public delegate void Func1(void* l,int* data);
public delegate void Func2(void* l,int* data);
...
}
и функция в C #:
[DllImport("lib.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void functionInterface(ref myStructure pToStruct);
При вызове этой функцииInterface () во время выполнения возникают исключения. Как "нарушение прав доступа для записи в ...адрес ... "или" нарушение прав доступа для чтения по адресу ... адрес ... "
Я не могу найти причину, я думаю, что проблема может заключаться в правильном выравнивании элементов в переведенной структуре, иливыравнивание стека, но я понятия не имею, как это сделать правильно.Или проблема может быть другой, другой природы, которую я не могу обнаружить, надеюсь, вы поможете мне, ребята.