为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
繁星淼淼 2019-03-22 15:14:16
C++结构体中的指针转换成c#类型
查看完整描述

3 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

IntPtr

要读取内容的时候,弄一个DWORD数组或者BYTE数组,
然后Marshal.Copy可以把这个IntPtr的内容复制到这个数组里(如果C++中这个指针是指向一个变量而不是指向多个变量,那么将数组的大小设为1即可),然后访问数组就可以得到值了。
Marshal.Copy可以从IntPtr复制到数组或者从数组复制到IntPtr,注意复制的时候字节数不要搞错就可以了。

Marsha.Copy完整的应该是System.Runtime.InteropServices.Marshal.Copy(凭印象的,如果有错自己上网找一下Marshal.Copy就可以了

查看完整回答
反对 回复 2019-03-27
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public 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);


 


查看完整回答
反对 回复 2019-03-27
  • 3 回答
  • 0 关注
  • 583 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信