c++ - VS 2015 Macro Explanation -
we found macro
#define offsetofclass(base, derived) \ ((dword)(dword_ptr)(static_cast(base*)((derived*)8))-8)
while working on windows kits header resides here
c:\program files (x86)\windows kits\8.1\include\um\shlwapi.h
what macro ?
this macro calculates offset between base , derived pointers.
first takes random address (8
) , casts derived*
. says "let's random derived starts @ memory address 8".
then static_casts base*
. since base
base class of derived
, resulting base*
pointer or not point @ same point in memory (8
), depending on it's layout.
then casts result dword_ptr
, dword
make number out of pointer. subtracts 8 (the initial value used) , gets offset. random number can used instead of 8
.
for example if both base
, derived
empty classes, then:
- derived * point 8
- base* point 8
- the result dword 8
- 8-8 = 0, offset between pointers 0.
Comments
Post a Comment