读书人

C#中施用委托来实现CALLBACK报错

发布时间: 2012-10-12 10:17:04 作者: rapoo

C#中使用委托来实现CALLBACK报错
C++的回调
BOOL NET_DVR_SetRealDataCallBack(LONG lRealHandle,void(CALLBACK *fRealDataCallBack) (LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,DWORD dwUser),DWORD dwUser)
C++中的使用
void CALLBACK RealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,DWORD dwUser){}
NET_DVR_SetRealDataCallBack(m_iPlayhandle, RealDataCallBack, m_iPlayhandle);


C#中的定义
public delegate void fRealDataCallBack( int realHandle, int dataType,ref byte[] vBuffer, int bufSize, int userID);
[DllImport("HCNetSDK.dll")]
public static extern bool NET_DVR_SetRealDataCallBack (int realHandle, fRealDataCallBack RealDataCallBack , int userID);

C#中的使用
public void RD( int realHandle, int dataType,ref byte[] vBuffer, int bufSize, int userID){}

某函数中调用委托
byte[] vBuff = new byte[1000] ;
int vBuffNum = 0;
NetSDK.fRealDataCallBack xx = RD;
ASCIIEncoding encoding = new ASCIIEncoding();
vBuff = encoding.GetBytes("235rewgfdfsfasdfsadf");
// rc(realHandle[0], 1, ref vBuff, 50, 0); // 可成功执行
NetSDK.NET_DVR_SetRealDataCallBack(realHandle[0], xx, userID);
// 出错,尝试读取或写入受保护的内存。这通常指示其他内存已损坏。


请教问题出在哪里.


[解决办法]
c#和c++交互最恶心的就是这个内存已损坏,再帮你看看。
[解决办法]
帮你顶一下,学习贴
[解决办法]
C# 方面, DWORD 要对应 UInt32

主要出错在C++那边,声明有问题
[解决办法]

探讨
dword可以用int,我测试过了,其他调用也是这样转换

[解决办法]
回帖也有分?那一定帮你顶啦,楼下继续
[解决办法]
// rc(realHandle[0], 1, ref vBuff, 50, 0); // 可成功执行

然而:NetSDK.NET_DVR_SetRealDataCallBack(realHandle[0], xx, userID); 报错.楼主仔细检查一下,有没有参数的值为空

[解决办法]
帮顶

读书人网 >C#

热点推荐