我在已经使用了一段时间的某些东西上遇到了这个奇怪的错误。这可能是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中使用过它,没有问题。
也许问题出在调用约定上。您确定非托管函数已编译为stdcall,而不是其他(我想是fastcall)吗?