gpt4 book ai didi

c++ - VS 2015 宏解释

转载 作者:行者123 更新时间:2023-11-28 05:13:46 25 4
gpt4 key购买 nike

我们找到了这个宏

#define OFFSETOFCLASS(base, derived) \
((DWORD)(DWORD_PTR)(STATIC_CAST(base*)((derived*)8))-8)

在处理驻留在此处的某些 Windows 套件 header 时

c:\Program Files (x86)\Windows Kits\8.1\Include\um\Shlwapi.h

这个宏实际上做了什么?

最佳答案

这个宏计算基指针和派生指针之间的偏移量。

首先,它获取一个随机地址 (8) 并将其转换为 derived*。基本上它说“假设一些随机派生从内存地址 8 开始”。

然后将其静态转换为 base*。由于 basederived 的基类,因此生成的 base* 指针将指向或不指向内存中的同一点( 8),取决于它的布局。

然后它将结果转换为 DWORD_PTR,然后转换为 DWORD 以从指针中生成一个数字。最后它减去 8(它使用的初始值)并得到偏移量。可以使用任何随机数代替 8

例如,如果 basederived 都是空类,那么:

  • 派生 * 将指向 8
  • base* 将指向 8
  • 结果 DWORD 将为 8
  • 8-8 = 0,所以指针之间的偏移量为0。

关于c++ - VS 2015 宏解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43071303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com