Вызов функции PInvoke имеет несбалансированный стек. Вероятно, это связано с тем, что управляемый PInvoke.. (.NET 4)
Мой проект успешно работает без ошибок в работе .NET Framework 3.5. Но, когда я нацеливаю его на работу .NET Framework 4. Я получил ошибку:
" Вызов функции PInvoke имеет несбалансированный стек. Вероятно, это связано с тем, что управляемая подпись PInvoke не соответствует неуправляемой целевой сигнатуре."
Я использовал неуправляемую библиотеку, как показано ниже:
[StructLayout(LayoutKind.Sequential )]
public class DGNElemCore
{
public int offset;
public int size;
public int element_id;
public int stype;
public int level;
public int type;
public int complex;
public int deleted;
public int graphic_group;
public int properties;
public int color;
public int weight;
public int style;
public int attr_bytes;
public IntPtr attr_data;
public int raw_bytes;
public IntPtr raw_data;
}
[DllImport("DgnLib.dll", EntryPoint = "DGNOpen")]
public static extern IntPtr DGNOpen(string fileName, int bUpdate)
Вы знаете, как исправить эту ошибку?
Ответы
Ответ 1
Добавьте это вместе с импортом dll.
, CallingConvention = CallingConvention.Cdecl)]
Как взято из здесь.
Платформа invoke
Чтобы повысить производительность при взаимодействии с неуправляемый код, некорректные вызовы вызова в платформе что приложение не работает. В предыдущих версиях маршалинг слой разрешил эти ошибки в стеке.
Отладка ваших приложений в Microsoft Visual Studio 2010 предупредит вас об этих ошибках, чтобы вы может исправить их. Если у вас есть двоичные файлы, которые не могут быть обновлены, вы можете включить элемент в свой файл конфигурации приложения, чтобы включить ошибки вызова разрешили стек, как в более ранних версиях. Однако это может повлиять производительность вашего приложения.
Ответ 2
Я добавил CallingConvention.ThisCall при импорте библиотеки DLL, и она сработала
Пожалуйста, попробуйте другие константы и проверьте, какая из них работает в вашей среде