c++类型转换问题:和atl相关
#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)))之后结果发生了变化,
请那为高手帮忙解答一下;;;感谢;;;
...全文
相关推荐
C++ 中ATL的简介
C++ 中ATL的简介 1.COM的发展及其局限性 自从1993年Microsoft首次公布了COM技术以后,Windows平台上的开发模式发生了巨大的变化,以COM为基础的一系列软件组件化技术将Windows编程带入了组件化时代。广大开发人员在为COM带来的软件组件化趋势欢欣鼓舞的同时,对于COM开发技术的难度和烦琐的细节也感到极其的不便。COM编程一度被视为一种高不可攀的技术,令人望而却步。开发人员希望能够有一种方快捷的COM开发工具,提高开发效率,更好地利用这项技术。 ----针对这种情况,Microsoft公司在推
c++builder 2010 atl库 头文件和lib
c++builder 2010 后 atl库都不带,只用使用本资源才能使用 ATL库 使用COM或 CComPtr 必备头文件和lib
atl相关说明和操作方法
能让新手快速atl入门,上手更加容易,相信你不会错过的!!!
ocx.rar_ATL_BLOCKINGSOCKET.CPP_atl ocx_atl tcp_ocx
演示用ATL编写的基于线程的TCP/IP通信控件
什么是ATL活动模板库
ATL,Active Template Library活动模板库,是一种微软程序库


