首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#对象转换成指针,该如何处理

2013-11-01 
C#对象转换成指针如何将C#的某个对象转换成IntPtr或其他类型的指针?(Marshal.StructureToPtr除外的方法。前

C#对象转换成指针
如何将C#的某个对象转换成IntPtr或其他类型的指针?(Marshal.StructureToPtr除外的方法。前提的这样的,我开发一个C#组件给C++调用,C++那边需要获取组件中的某个对象的值,这个对象是由组件负责管理的,所以C++那边获得这个对象的指针即可。)
[解决办法]
C#引用类型存的不就是内存堆中变量的地址吗,Mark
[解决办法]
通过Marshal封送数据流,对方解析
[解决办法]
只有值类型才可以得到指针。

引用类型不可以。道理很简单,引用类型指向托管堆,GC随时会回收的,GC不能跟踪是否有“指针”还在指向它。
[解决办法]
类似如下,要指明布局


    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
    public struct FSYDItems
    {
        [MarshalAs(UnmanagedType.I4)]
        private int _seltime;
        [MarshalAs(UnmanagedType.I2)]
        private UInt16 _itemtype;
        [MarshalAs(UnmanagedType.I4)]
        private int _amount;
        [MarshalAs(UnmanagedType.R4)]
        private float _price;
        [MarshalAs(UnmanagedType.R4)]
        private float _preprice;
        [MarshalAs(UnmanagedType.R4)]
        private float _afterprice;

        public int SelTime
        {
            get { return this._seltime; }
            set { this._seltime = value; }
        }
        public UInt16 ItemType
        {
            get { return this._itemtype; }
            set { this._itemtype = value; }
        }
        public int Amount
        {
            get { return this._amount; }
            set { this._amount = value; }
        }
        public float Price
        {
            get { return this._price; }
            set { this._price = value; }
        }
        public float PrePrice
        {
            get { return this._preprice; }
            set { this._preprice = value; }
        }
        public float AfterPrice
        {
            get { return this._afterprice; }
            set { this._afterprice = value; }
        }
    }

热点排行