初识IntPtr

伙伴解说:

 c#结构体与C++指针互相转换时就用IntPtr 
 就是把一块内存或者一个结构体数据,通过Marshal类中的方法,进行封装和解析。
 把C#结构体数据,封装后给C++接口使用。或把c++指针应的对象解析为结构体。
 
下列代码中pGpsData就是IntPtr类型,把这个相当于指针的东西,解析成结构体BVCU_PUCFG_GPSData。
  1 BVCU_PUCFG_GPSData gpsdata = (BVCU_PUCFG_GPSData)Marshal.PtrToStructure(pGpsData, typeof(BVCU_PUCFG_GPSData)); 
以下为结构体BVCU_PUCFG_GPSData:
 1 //GPS数据结构体 wfy on 20150417
 2     [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
 3     public struct BVCU_PUCFG_GPSData
 4     {
 5         public BVCU_WallTime stTime;
 6         public Int32 iLongitude;
 7         public Int32 iLatitude;
 8         public Int32 iHeight;
 9         public Int32 iAngle;
10         public Int32 iSpeed;
11         public Int32 iStarCount;
12         public Int32 bAntennaState;
13         public Int32 bOrientationState;
14         public int iSatelliteSignal;
15         [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
16         Int32[] iReserved;
17     }

以下就是把结构体封装成Ptr引用:

1 BVCU_PUCFG_GPSData gpsData;
2 IntPtr pt = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(BVCU_PUCFG_GPSData)));
3 Marshal.StructureToPtr(gpsData, pt, true);

这里还涉及到由托管内存到非托管内存的转移。c#为托管,c++为非托管。

 

 

 

 

转载于:https://www.cnblogs.com/lxxhome/p/7028115.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值