1,得到某个类的实例的指针。
MyClass newClass = new MyClass();
RuntimeTypeHandle handle = newClass.GetType().TypeHandle;
IntPtr ptr = handle.Value;
这样就得到了指向该类实例的指针。2.根据已知指针返回某个类的实例
int handler = XXXX;
IntPtr ptr = new IntPtr(handler);
Object obj = Pointer.Box(ptr,typeof(newClass));
这样就根据指针得到了所需要的对象了。
注:以上代码转至网络。我用MyClass newClass = new MyClass();
RuntimeTypeHandle handle = newClass.GetType().TypeHandle;
IntPtr ptr = handle.Value;
Object obj = Pointer.Box(ptr,typeof(MyClass));做测试,编译不通过:无法从“System.IntPtr”转换为“void*”代码做了如下修改:MyClass newClass = new MyClass();
RuntimeTypeHandle handle = newClass.GetType().TypeHandle;
IntPtr ptr = handle.Value;
Object obj = Pointer.Box(ptr.ToPointer(),typeof(MyClass));运行时在最后一行报错:类型必须是指针。参数名: ptr后来把MyClass改为结构体(值类型),代码改为:MyClass newClass = new MyClass();
RuntimeTypeHandle handle = newClass.GetType().TypeHandle;
IntPtr ptr = handle.Value;
Object obj = Pointer.Box(ptr.ToPointer(),typeof(MyClass*));
运行是可以了。但是obj并不是newClass对象,而是一个Pointer类型的对象。我的问题是:如果把最后得到的obj,转成newClass对象?
解决方案 »
- 帮看看什么问题
- WPF:如何使用Slider代替ScrollViewer控件中的Scrollbar?
- Insert提示插入成功,但是表里却没有数据
- rejectchanges, 还缺了点什么?
- .net1.1 c# 按钮提交之前 想用前台脚本验证,通过了再执行后台的ServerClick事件 怎么写
- 老问题新问:TEXTBOX的内容是否能实现word似的分页输入?求点思路,向各位朋友求助。
- C盘被撑死了,好可怜啊!
- 请问大家,在操作数据库时是用控件的绑定好还是手动来控制好一些。能否给些例子。
- [c#]请问如何隐式Get提交后获取到对方返回的XML
- 新手问题第十四帖-------------------如何在datagrid中加入按钮。
- 如何把asp:DropDownList做函数参数??
- C#的简单奇怪问题。
MyClass mc = (MyClass)obj;
MyClass* p = (MyClass*)Pointer.Unbox(obj);
MyClass mc = *p;
Console.WriteLine(mc.i.ToString());
我测试过了,运行没问题,但是mc里的成员的值都跟newClass不一样了。有道理。
{
MyClass newClass = new MyClass();
newClass.i = 100;
unsafe
{
MyClass* p = &newClass;
MyClass obj = *p;
Console.WriteLine(obj.i.ToString());
}
}public struct MyClass { public int i { get; set; } }
这个我知道,刚刚做 了这样的测试,呵呵,以前也学过C++
引用的托管堆地址不是固定的,GC的回收可能导致其改变。这个没错,但是在这个例子中,是值类型的,不是托管堆,应该是堆栈才是。