我用C#调用C++的DLL,但是运行的时候报错:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”我觉得是参数传的不正确,我是菜鸟,希望各位高手不吝赐教!!!感激不尽这是C++ DLL中的函数:
LONG APIENTRY devwdm_SetMirror(int nID, DWORD *dwMirror, BOOL fbGet);我在C#中视这样调用的: [DllImport("devwdm.dll",CharSet = CharSet . Unicode )]
//函数功能: 将视频图水平翻转180度,
//nID: 设备ID号
//dwMirror: 为DWORD的指针,1或0, 1表示翻转,0表示正常显示
//fbGet: 1:此函数当Get使用, 0,此函数当Set使用
unsafe public static extern int devwdm_SetMirror(int nID, uint * dwMirror,bool fbGet);
unsafe private void ckbShuiPing_CheckedChanged(object sender, EventArgs e)
{
uint *dwMirror=(uint *)0;
SDK_API.devwdm_SetMirror (nID ,dwMirror ,false );
}请问什么地方出错了啊,还有,C++中的DWORD* ,在C#中怎么转换啊?用IntPtr也不行啊,谢谢各位了!!!
LONG APIENTRY devwdm_SetMirror(int nID, DWORD *dwMirror, BOOL fbGet);我在C#中视这样调用的: [DllImport("devwdm.dll",CharSet = CharSet . Unicode )]
//函数功能: 将视频图水平翻转180度,
//nID: 设备ID号
//dwMirror: 为DWORD的指针,1或0, 1表示翻转,0表示正常显示
//fbGet: 1:此函数当Get使用, 0,此函数当Set使用
unsafe public static extern int devwdm_SetMirror(int nID, uint * dwMirror,bool fbGet);
unsafe private void ckbShuiPing_CheckedChanged(object sender, EventArgs e)
{
uint *dwMirror=(uint *)0;
SDK_API.devwdm_SetMirror (nID ,dwMirror ,false );
}请问什么地方出错了啊,还有,C++中的DWORD* ,在C#中怎么转换啊?用IntPtr也不行啊,谢谢各位了!!!
//函数功能: 将视频图水平翻转180度,
//nID: 设备ID号
//dwMirror: 为DWORD的指针,1或0, 1表示翻转,0表示正常显示
//fbGet: 1:此函数当Get使用, 0,此函数当Set使用
public static extern int devwdm_SetMirror(int nID, ref uint dwMirror,bool fbGet);
private void ckbShuiPing_CheckedChanged(object sender, EventArgs e)
{
uint dwMirror=0;
SDK_API.devwdm_SetMirror (nID ,ref dwMirror ,false );
}
参数
内存资源没有及时释放导致此错误
//函数功能: 将视频图水平翻转180度,
//nID: 设备ID号
//dwMirror: 为DWORD的指针,1或0, 1表示翻转,0表示正常显示
//fbGet: 1:此函数当Get使用, 0,此函数当Set使用
public static extern int devwdm_SetMirror(int nID, ref int dwMirror,bool fbGet);
private void ckbShuiPing_CheckedChanged(object sender, EventArgs e)
{
int dwMirror=0;
SDK_API.devwdm_SetMirror (nID ,ref dwMirror ,false );
}
C++的DLL是采用stdcall声明的吗?确认下调用方式