У меня есть DLL, написанная на C, которую мне нужно использовать
в моем приложении C #.
Но у меня есть проблема, у меня есть интерфейс, который использует структуру снизу:
typedef struct {
int (*Func1)(void*, int*);
int (*Func2)(void*, int*);
...
} myStructure;
Итак, мне нужно перевести его на C #:
[StructLayout(LayoutKind.Sequential)]
public unsafe struct myStructure
{
public delegate int Func1(void* l,int* data);
public delegate int Func2(void* l,int* data);
...
}
В C # мне нужно связать функции этой структуры с реальными методами, но я не могу этого сделать, потому что делегаты являются сильными типами, и мне нужно создать экземпляр этих делегатов, поэтому я решил немного изменить эту структуру в C #,
как это:
[StructLayout(LayoutKind.Sequential)]
public unsafe struct myStructure
{
public delegate int func1(void* l,int* data);
public delegate int func2(void* l,int* data);
...
public func1 Func1;
public func2 Func2;
...
}
Он компилируется, но приложение вылетает и выдает эту информацию отладки:
получить эту ошибку:
Помощник по управляемой отладке 'PInvokeStackImbalance'
Вызов функции PInvoke «myApp! MyApp.Somenamespace :: MyInterface» разбалансирует стек. Это вероятно потому, что управляемая подпись PInvoke не совпадает с неуправляемой целевой подписью. Убедитесь, что соглашение о вызовах и параметры подписи PInvoke соответствуют целевой неуправляемой подписи.
Программа '[7976] myApp.exe' завершила работу с кодом -1 (0xffffffff).
Некоторые идеи, как я могу решить эту проблему?