我们找到了这个宏
#define OFFSETOFCLASS(base, derived) \
((DWORD)(DWORD_PTR)(STATIC_CAST(base*)((derived*)8))-8)
在处理驻留在此处的某些Windows Kits标题时
c:\Program Files (x86)\Windows Kits\8.1\Include\um\Shlwapi.h
这个宏实际上做了什么?
答案 0 :(得分:1)
此宏计算基本指针和派生指针之间的偏移量。
首先,它需要一个随机地址(8
)并将其强制转换为derived*
。基本上它说"让我们说一些随机Derived从内存地址8开始#34;
然后静态广播到base*
。由于base
是derived
的基类,因此生成的base*
指针将会或不会指向内存中的同一点(8
),具体取决于它{&#39}。布局。
然后它将结果转换为DWORD_PTR
,然后转换为DWORD
以从指针中生成一个数字。最后,它减去8(它使用的初始值)并获得偏移量。可以使用任何随机数代替8
。
例如,如果base
和derived
都是空类,那么: