C# 中如何实现 memcpy 函数的功能啊?
C#中怎样可以实现memcpy把char转换为结构体啊?参考以下C++代码:
int CALLBACK MessageCallback(LONG lCommand,char *sDVRIP,char *pBuf,DWORD dwBufLen)
{
NET_DVR_ALARMINFO m_alarminfo; //结构体
var *pBuf;
memcpy(&m_alarminfo, pBuf, sizeof(NET_DVR_ALARMINFO));
}
------解决方案--------------------帮LZ顶
------解决方案--------------------System.Runtime.InteropServices.Marshal.PtrToStructure
------解决方案--------------------看看System.Buffer.BlockCopy能不能实现你的目的
------解决方案--------------------unsafe
实现
------解决方案--------------------int CALLBACK MessageCallback(LONG lCommand,char *sDVRIP,char *pBuf,DWORD dwBufLen)
{
NET_DVR_ALARMINFO m_alarminfo; //结构体
var *pBuf;
memcpy(&m_alarminfo, pBuf, sizeof(NET_DVR_ALARMINFO));
}
在p/invoke时,如果传递参数遇到问题时,可以考虑使用byte[]或byte*代替类型,这种类型的参数可以得到参数完整的二进制信息,然后你自己解析这个byte[]就可以了
比如以下C++伪码
Struct s
{
int a;
char * b;
}
Socket.Send(s);
...
如果用C#接收到是的话可以这样解析:前4字节为a,后边的为b 把前4字节转化为int 后4字节转化为string就可以了
------解决方案--------------------Array.Copy