MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Как избавиться от исключения "вызов функции PInvoke разбалансировал стек""
Answer 986381
Начать с того, что это не исключение, а диагностическое сообщение CLR (которое автоматически включено при запуске под отладчиком). Оно действительно может выводиться через раз, так как невозможно автоматически определить каждый выстрел в ногу с некорректным использованием P/Invoke, но ложной тревогой оно является редко.
Как исправить? Сделать то, что написано - привести объявление P/Invoke в соответствие с реальным прототипом функции. Если загрузить с сайта AllCode пример для С++, в заголовочном файле можно найти такое объявление:
__declspec(dllimport) unsigned char FA_ComOpen( unsigned char Port );
Оно уже не соответствует вашему. Во-первых, не указанное соглашение о вызове - это cdecl, а в P/Invoke по умолчанию - stdcall. Во-вторых, Типу unsigned char в C# соответствует byte, а не char. Если предположить, что объявление для С++ правильное, объявление для C# должно выглядеть так:
[DllImport("FASlave.dll", CallingConvention = CallingConvention.Cdecl)] static extern byte FA_ComOpen(byte Port);
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.