2016年7月13日 星期三

pointer in c#

在manage code中使用pointer的方法
這裡會用到
System.Runtime.InteropServices.GCHandle類別,提供從unmanaged memory中存取manage object的方式

使用命名空間
using System.Runtime.InteropServices;


建立


定義需要使用的structure
**這裡不能用struct circleInfo{},因為struct是value type
        class circleInfo {
            public MIL_INT label;
            public double x, y;
        }

實現structure
 circleInfo thisCircle = new circleInfo();

在CG裡面建立實體
GCHandle circleInfoHnd = GCHandle.Alloc(thisCircle);

轉換成IntPtr
GCHandle.ToIntPtr(circleInfoHnd)

使用

//檢查UserDataPtr不是空
            if (!IntPtr.Zero.Equals(UserDataPtr))
            {
//利用intptr建立GCHandler
                GCHandle hUserData = GCHandle.FromIntPtr(UserDataPtr);
//將handler中的物件(.Target)轉換為目標型態
                circleInfo thisCircle = hUserData.Target as circleInfo;
            }

沒有留言:

張貼留言