Мне нужно вызвать C ++ DLL из моей программы на C #.
Я пытаюсь сделать это с помощью PInvoke - все отлично работает в VS2005 \ 2008, но после перехода на VS 2010 я получаю следующее исключение:
PInvokeStackImbalance был обнаружен
Сообщение: вызов функции PInvoke
'sampleFunc' разбалансировал стек.
Это вероятно потому, что удалось
PInvoke подпись не соответствует
неуправляемая целевая подпись. Проверь это
соглашение о вызовах и параметры
подписи PInvoke соответствуют
целевая неуправляемая подпись.
Это оригинальный прототип C ++:
typedef struct {
unsigned short field1;
unsigned short field2;
} sInfo;
_declspec(dllexport) int sampleFunc(sInfo *info, char *txt);
и вот код C #:
[StructLayout(LayoutKind.Sequential)]
struct SInfo
{
//[MarshalAs(UnmanagedType.U1)] //also tried with the MarshalAs attr. Didn't help.
public ushort field1;
//[MarshalAs(UnmanagedType.U1)]
public ushort field2;
};
[DllImport("sampleModule.dll", CharSet=CharSet.Ansi)]
public static extern int sampleFunc(ref SInfo info, [MarshalAs(UnmanagedType.LPStr)] string txt);
Я пробовал также с IntPtr вместо ссылки SInfo, но получил тот же результат ...
Любая помощь будет оценена,
Спасибо всем!