日期:2014-05-20  浏览次数:21743 次

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