c#调用c++ DLL库函数 签名不匹配 求大神
这是dll中定义的函数
void JVS_SetVideoPreview(intnChannel, HWND hWnd, RECT rtWindow, BOOL bPreview);
下面是我在c#中写的对应的函数
[DllImport("JVSDK.dll", EntryPoint = "JVS_SetVideoPreview", CallingConvention = CallingConvention.Cdecl)]
public static extern void JVS_SetVideoPreview(int nChannel, IntPtr hWnd, Rectangle rtWindow, bool bPreview);
报以下错误
对 PInvoke 函数“AutoCount!AutoCount.JVSDK::JVS_SetVideoPreview”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
请高手帮忙
------解决方案--------------------CallingConvention = CallingConvention.stdcall
------解决方案--------------------方法1
修改dll,将rtWindow 参数改为指针类型RECT*
方法2
C#这边rtWindow改为4个int参数传递 dll那边不改动
------解决方案--------------------Rectangle rtWindow
Rectangle和RECT不兼容。自己定义一个原型。
------解决方案--------------------
+1
[StructLayout(LayoutKind.Sequential)]
public struct RECT {
public int Left;
public int Top;
public int Right;
public int Bottom;
}
Api_Exp [.net下的api查看工具]
需要安装.net framework 1.1