读书人

c#调用c++ DLL库函数 签字不匹配 求大

发布时间: 2013-03-27 11:22:42 作者: rapoo

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不兼容。自己定义一个原型。
[解决办法]
引用:
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

读书人网 >C#

热点推荐