可能是一个菜鸟问题,但在过去的几个小时(或几天)里,这让我陷入了困境......
我在 .NET Framework 4.0 的代码中从 DLL 调用方法
[DllImport("xeneth.dll")]
public static extern ErrorCode XC_GetFrame(Int32 h, FrameType type, ulong ulFlags, IntPtr buff, uint size);
然后在这里使用它:
if (XC_GetFrame(myCam, XC_GetFrameType(myCam), 0, IntPtr.Zero, (uint)fs) != ErrorCode.E_NO_FRAME)
但是,当我在 .NET 4.0 中运行它时,我得到一个 P/INVOKE 错误,但是......在 3.5 中运行它不会触发这个错误。在我和另一个程序员检查了代码之后,我们似乎把它归结为 IntPtr 在 4.0 上运行的方式不同。
我的应用程序需要在 .NET 4.0 中运行,因为应用程序所需的一些功能仅在 4.0 中可用...
有什么我可能忽略或忘记包含的内容吗?
任何想法都非常感谢!
汤姆
更新:
原生声明:
virtual ErrCode XCamera::GetFrame(FrameType type, unsigned long ulFlags, void *buffer, unsigned int size)
错误:对 PInvoke 函数 'DLLTest!DLLTest.Form1::XC_GetFrameType' 的调用使堆栈不平衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。