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++那边,声明有问题
[解决办法]