C++结构体中的指针转换成c#类型

C++结构体中的指针转换成c#类型


繁星淼淼
浏览 584回答 3
3回答

12345678_0001

IntPtr要读取内容的时候,弄一个DWORD数组或者BYTE数组,然后Marshal.Copy可以把这个IntPtr的内容复制到这个数组里(如果C++中这个指针是指向一个变量而不是指向多个变量,那么将数组的大小设为1即可),然后访问数组就可以得到值了。Marshal.Copy可以从IntPtr复制到数组或者从数组复制到IntPtr,注意复制的时候字节数不要搞错就可以了。Marsha.Copy完整的应该是System.Runtime.InteropServices.Marshal.Copy(凭印象的,如果有错自己上网找一下Marshal.Copy就可以了

拉莫斯之舞

1234567891011121314151617181920public struct GT_DISCOVERY_INFO{  [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]  public char[] byDevModel;  public Int32 iDevType;  public Int32 iPort;  [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]  public char[] byIP;  [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]  //假定GT_MACADDR_LEN=4  public char[] byMACAddr;  。。。。。。};[DllImport("xxxxx.dll")]public static extern Int32 GT_DEV_Login(    string pchDEVIP,    UInt16 wDEVPort,    string pchUserName,    string pchPassword,    ref GT_DEV_DEVICECFG lpDeviceInfo,    ref Int32 error); 
打开App,查看更多内容
随时随地看视频慕课网APP