zoukankan      html  css  js  c++  java
  • 初识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++为非托管。

  • 相关阅读:
    DOM--3 DOM核心和DOM2 HTML(3)
    js-其他
    DOM--3 DOM核心和DOM2 HTML(2)
    DOM--3 DOM核心和DOM2 HTML(1)
    插入视频(youtube)
    DOM--2 创建可重用的对象
    safari的坑
    DOM--1 遵循最佳实践
    mvc-5视图和模版
    mvc-4控制器和状态(2)
  • 原文地址:https://www.cnblogs.com/lxxhome/p/7028115.html
Copyright © 2011-2022 走看看