如何获得一个class类型类量的指针

微创社(MCC) 2009-09-05 09:49:11
加精
貌似传统方法,只能到取结构类型的:
http://topic.csdn.net/u/20090825/16/725bc96a-33f9-4c63-85ef-01d22d6c1ed2_3.html
说明见:292楼~~

using System;
namespace ConsoleApplication9
{
public struct BofStruct { }
public class BofClass { }
class Program
{
unsafe static void Main(string[] args)
{
//--准备
BofStruct bs = new BofStruct();
BofClass bc = new BofClass();

//--测试
//Console.WriteLine("BofStruct'sizeof:{0}", sizeof(BofClass));
//无法获取托管类型(“BofClass”)的地址和大小,或无法声明指向它的指针
Console.WriteLine("BofStruct'sizeof:{0}", sizeof(BofStruct));
//BofStruct'sizeof:4
//Console.WriteLine("bc'pointer:{0:X8}", (uint)&bc);
//无法获取托管类型(“BofClass”)的地址和大小,或无法声明指向它的指针
Console.WriteLine("bc'pointer:{0:x8}", (uint)&bs);
//bc'pointer:057fecd0

//--使用
int num;
int* p;
p = #
*p = 999;
System.Console.WriteLine("p:{0}", *p);
System.Console.WriteLine("p:{0}", p->ToString());

Console.ReadKey();
}
}
}


也许也有别的方法吧~~
...全文
2354 132 打赏 收藏 转发到动态 举报
写回复
用AI写文章
132 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyips 2012-01-10
  • 打赏
  • 举报
回复
[Quote=引用 82 楼 yuruifang 的回复:]

object data = new object();
GCHandle handle = GCHandle.Alloc(data);
void* pVer = handle.AddrOfPinnedObject().ToPointer();
// do something.
handle.Free();
[/Quote]

你确定是取得地址?我经过实际测试,得出的结论是:GCHandle.Alloc(data)给data分配了一个句柄,ToPointer()得到的是句柄地址,非data地址
测试代码如下:
struct Stru
{
public int s;
}

Stru data = new Stru();

main()
{
unsafe
{

int iii ;
fixed (void* psss = &data)
{
iii = (int)psss;
}

System.Runtime.InteropServices.GCHandle handle = System.Runtime.InteropServices.GCHandle.Alloc(data, System.Runtime.InteropServices.GCHandleType.Pinned);

IntPtr ip = handle.AddrOfPinnedObject();

void* pVer = ip.ToPointer();

// do something.
handle.Free();
}
微创社(MCC) 2009-09-21
  • 打赏
  • 举报
回复
结贴
csshrb2004 2009-09-19
  • 打赏
  • 举报
回复
好东西啊
redhat_402 2009-09-18
  • 打赏
  • 举报
回复
难哦!
honeywho 2009-09-18
  • 打赏
  • 举报
回复
积分积分
csq420721597 2009-09-18
  • 打赏
  • 举报
回复
学习中
zxkid 2009-09-18
  • 打赏
  • 举报
回复
不错哦 学习了
hallowwar 2009-09-18
  • 打赏
  • 举报
回复
呵呵,我直接把这页保存起来,慢慢学,希望大侠们多讨论,那是有水平的体现。
SlaughtChen 2009-09-18
  • 打赏
  • 举报
回复
路过. 指针都不会用啦.
微创社(MCC) 2009-09-18
  • 打赏
  • 举报
回复
CLR2.0内存布局之MT表,
完成度95%,还有5%是最难的(就差三个字段了),
微软公开了CLR1.1,2.0啥参考都摸有,晕~~~
alemist2 2009-09-18
  • 打赏
  • 举报
回复
虽然不知道,还是要顶一下。
hdwgh 2009-09-18
  • 打赏
  • 举报
回复
学习学习
sjianlin 2009-09-18
  • 打赏
  • 举报
回复
UP
yewuyu 2009-09-18
  • 打赏
  • 举报
回复
关注ing'
regcwt 2009-09-17
  • 打赏
  • 举报
回复
指向类的成员的指针
在C++中,可以说明指向类的数据成员和成员函数的指针。
指向数据成员的指针格式如下:
<类型说明符><类名>::*<指针名>
指向成员函数的指针格式如下:
<类型说明符>(<类名>::*<指针名>)(<参数表>)
例如,设有如下一个类A:
class A
{
public:
int fun (int b) { return a*c+b; }
A(int i) { a=i; }
int c;
private:
int a;
};
定义一个指向类A的数据成员c的指针pc,其格式如下:
int A:: *pc = &A::c;
再定义一个指向类A的成员函数fun的指针pfun,其格式如下:
int (A:: *pfun)(int) = A::fun;
quickily 2009-09-17
  • 打赏
  • 举报
回复
不是很明白
onemyself 2009-09-17
  • 打赏
  • 举报
回复
学习学习
超级大笨狼 2009-09-17
  • 打赏
  • 举报
回复
用指针能比把对象装到Hash表里快一些,但是代码可读,可用性就很糟糕。
冰岛男孩 2009-09-17
  • 打赏
  • 举报
回复
mark
足球中国 2009-09-17
  • 打赏
  • 举报
回复
c#里面用指针,这样更多的问题都会出来的。
c#不用指针就只用到c++百分之间10不赞成。
基于API的开发。和mfc没啥区别(效率上聊外)。
加载更多回复(106)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧