#include <windows.h>
#include <iostream>
using namespace std;class Base1 {
public:
virtual void f() { }
};class Base2 {
public:
virtual void f() { }
};class Base3 {
public:
virtual void f() { }
};class Drive : public Base1, public Base2, public Base3 {
};#define _ATL_PACKING 8#define offsetofclass(base, derived) \
((DWORD)(static_cast<base*>((derived*)_ATL_PACKING))-_ATL_PACKING)int main() {
cout << offsetofclass(Base1, Drive) << endl;
cout << offsetofclass(Base2, Drive) << endl;
cout << offsetofclass(Base3, Drive) << endl;
return 0;
}程序的输出为:
0
4
8在宏offsetofclass当中,((derived*)_ATL_PACKING)的值仍然是_ATL_PACKING,
为什么加上(static_cast<base*>((derived)_ATL_PACKING)))之后结果发生了变化,
请那为高手帮忙解答一下;;;感谢;;;
#include <iostream>
using namespace std;class Base1 {
public:
virtual void f() { }
};class Base2 {
public:
virtual void f() { }
};class Base3 {
public:
virtual void f() { }
};class Drive : public Base1, public Base2, public Base3 {
};#define _ATL_PACKING 8#define offsetofclass(base, derived) \
((DWORD)(static_cast<base*>((derived*)_ATL_PACKING))-_ATL_PACKING)int main() {
cout << offsetofclass(Base1, Drive) << endl;
cout << offsetofclass(Base2, Drive) << endl;
cout << offsetofclass(Base3, Drive) << endl;
return 0;
}程序的输出为:
0
4
8在宏offsetofclass当中,((derived*)_ATL_PACKING)的值仍然是_ATL_PACKING,
为什么加上(static_cast<base*>((derived)_ATL_PACKING)))之后结果发生了变化,
请那为高手帮忙解答一下;;;感谢;;;
解决方案 »
- 新手提问:关于BSTR赋值的简单问题。。。搞晕了。。。
- clw文件在哪里?
- 关于DefWindowProc
- 类似消息处理的问题, 请各位帮忙,谢谢先
- ftp编程,类CFtpFileFind,获得服务器文件后,调用GetLastWriteTime( CTime )却得不到正确的时间,是不是服务器不支持保存文件的属性,如
- 哪位熟悉图形编程的,是否能解决这个问题?关于图片拉伸的。http://community.csdn.net/Expert/topic/3728/3728341.xml?temp=.9489099,
- 请问哪里有windows基本控件的消息列表?
- 请问用vc编写的ocx
- 如何对一个CArray进行排序?
- 新建了一个ATL服务(EXE)工程,请问能否把默认工程生成的文件内容简化或删除呢?
- 关于在Web上发布ActiveX组件的问题(新!)
- 视中放控件的问题,在线等待
这里关心的是相对值,_ATL_PACKING绝对值得变化没什么关系,只要不为0就行了