Я получаю эту странную ошибку в некоторых вещах, которые я использовал довольно долгое время. Это может быть новая вещь в Visual Studio 2010, но я не уверен.
Я пытаюсь вызвать незафиксированную функцию, написанную на C++ с C#.
Из того, что я читал в Интернете и самого сообщения об ошибке, это связано с тем, что подпись в моем C#-файле не такая же, как у C++, но я действительно не могу ее видеть.
Прежде всего это моя unamanged функция ниже:Вызов функции PInvoke '[...]' имеет несбалансированный стек
TEngine GCreateEngine(int width,int height,int depth,int deviceType);
А вот моя функция в C#:
[DllImport("Engine.dll", EntryPoint = "GCreateEngine", CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr CreateEngine(int width,int height,int depth,int device);
Когда я отладки в C++ я вижу все аргументы просто отлично так, таким образом, я могу только думаю, что это связано с преобразованием из TEngine (который является указателем на класс с именем CEngine) в IntPtr. Я использовал это раньше в VS2008 без проблем.
Привет всем, Я столкнулся с той же проблемой, но с Visual studio 2013. Я напрямую добавил ссылку на dll C++ в мой проект C#, который отлично работал в 2010 году, но не в 2013 году. Я также упомянул CallingConvention.Cdecl – Finisher001