如:
BOOL GetA( void * p )
{ //-- p已指向一个结构。
//-- 指导结构成员类型为 int, char, double三个数据成员。
//-- 这里怎么访问它们?(有可能吗?)
return TRUE;
}
谢谢!郁闷半天了!
BOOL GetA( void * p )
{ //-- p已指向一个结构。
//-- 指导结构成员类型为 int, char, double三个数据成员。
//-- 这里怎么访问它们?(有可能吗?)
return TRUE;
}
谢谢!郁闷半天了!
po->int
po->char
po->double
(struct s*)p->
int* ia=(int*)(p+int数的偏移字节数);
如
static_cast<CRect *>(p)->Left不就行了
此外,可以根据结构变量的内存影像来直接读取各成员的地址.地址开始好象是一个虚指针,然后依次是成员, 但是在windows好象会以32BYTE为单位来自动对齐数据,所以这样做需要对各成员的存放地址搞清楚,如果是我我就试试,很好试出来的吧?
还好,你这个类里没有复杂对象(象string什么的)倒不错,不然要用二次指针了.
其次,我用void * 时他总告诉我“非法的间接寻址”!
用其它方法也行,只要能访问其中的成员就行!
int pi = *((int*)(pstruct + ioffset));
还有,“非法的间接寻址”是什么意思呢?查查MSDN里的错误信息看看有什么有用的提示没有。
key(中国程序员) 说的是最好的方法,也是最安全的方法,其他用首地址+offset的方法不仅麻烦(首先得计算offset值),而且不安全(万一 offset计算错误呢)
另外: key(中国程序员) ,你是不是在非技术区发贴了,跟我一样,信誉值是97,有什么办法补回来吗?
比如
char data[]={0x10,0x11,0x12,0x13,0x14,0x15,0x16};
void *p;
你要取出data里的数。
那你必须知道他的类型,
设
int type[]={1,2,4};//1=char 2=short 4=long
如下
p=data;
for(i=0;i<3;i++)
{
switch(type[i])
{
case 1:printf("Get %c\n",*(char *)p);p=(char*)p++; break;
case 2:printf("Get %c\n",*(short *)p);p=(short*)p++ ;break;
case 4:printf("Get %c\n",*(long *)p);p=(long*)p++ ;break;
}}
%c应该依次为 %c %d %ld