Я получаю эту странную ошибку на некотором материале, который я использовал долгое время. Это может быть новая вещь в Visual Studio 2010, но я не уверен.
Я пытаюсь вызвать unamanged функцию, записанную в C++ из C#.
Из того, что я читал в Интернете и самом сообщении об ошибке, это имеет что-то, чтобы сделать с тем, что подпись в моем файле C# не является тем же как тем от C++, но я действительно не вижу его.
В первую очередь, это - моя функция unamanged ниже:
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 без проблемы.
Возможно, проблема кроется в соглашении о вызове. Вы уверены, что неуправляемая функция была скомпилирована как stdcall, а не как что-то другое (я бы предположил fastcall)?
.