class Node
{
   public Point Data;
   public Node next;
}

Node n=new Node();
Node * pN=&n;
这样会提示错误..不能获取托管类型的地址...如题... 估计没有人会..

解决方案 »

  1.   

    .net 运行时可能会移动对象在内存中的位置,因此取得地址也没办法操作。
      

  2.   

    第一:必须在不安全上文中才能获得地址
    第二:貌似只有值类型才能获得地址(Point是值类型,Node应该是个引用类型吧)
    引用类型存在于托管堆上,应该不能获取
      

  3.   

    不知道这个算不算,字面意思是返回一个IUnkown指针,每次创建实例后分配的都不一样
    namespace WindowsApplication6
    {
        class Node
        {
            public Point Data;
            public Node next;
        }    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                Node n = new Node();
                IntPtr P = System.Runtime.InteropServices.Marshal.GetIUnknownForObject(n);
                MessageBox.Show(P.ToString());
                n = new Node();
                P = System.Runtime.InteropServices.Marshal.GetIUnknownForObject(n);
                MessageBox.Show(P.ToString());
                n = new Node();
                P = System.Runtime.InteropServices.Marshal.GetIUnknownForObject(n);
                MessageBox.Show(P.ToString());
                n = new Node();
                P = System.Runtime.InteropServices.Marshal.GetIUnknownForObject(n);
                MessageBox.Show(P.ToString());
                n = new Node();
                P = System.Runtime.InteropServices.Marshal.GetIUnknownForObject(n);
                MessageBox.Show(P.ToString());
            }
        }
    }
      

  4.   

    1.C#中的指针。
    在C#中,可以用unsafe代码使用指针。但是,指针只能指向值类型,不能指向引用类型。参考http://msdn.microsoft.com/zh-cn/library/y31yhkeb(v=VS.80).aspx
    如果你的类是个轻量型的,可以考虑把该类写成struct,就可以用*操作符直接获取地址。
    2.IntPtr类型。
    在System.Runtime.InteropServices名称空间里,有一些用于
    在托管内存与非托管内存之间互操作的类。Marshal.GetIUnknownForObject()。一般用于调用com对象。比如activex对象。参考http://www.wangchao.net.cn/bbsdetail_577247.html
    但是关键看你要获取对象地址的用途是什么。托管对象每次垃圾回收极可能进行内存搬运,地址都会发生改变。