一尘不染

调用PInvoke函数'[…]'已使堆栈不平衡

c#

我在已经使用了一段时间的某些东西上遇到了这个奇怪的错误。这可能是Visual Studio 2010中的新事物,但我不确定。
我试图从C#调用用C 编写的无用函数。
从我在互联网上阅读的内容和错误消息本身来看,这与C#文件中的签名与C
中的签名不同,但我确实看不到它有关。
首先,这是我下面不需要的功能:

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中使用过它,没有问题。


阅读 194

收藏
2020-05-19

共1个答案

一尘不染

也许问题出在调用约定上。您确定非托管函数已编译为stdcall,而不是其他(我想是fastcall)吗?

2020-05-19