首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2013-03-27 
c#调用c++ DLL库函数 签名不匹配 求大神这是dll中定义的函数voidJVS_SetVideoPreview(intnChannel, HWND h

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

热点排行