gpt4 book ai didi

windows - 64 位机器上的 DWORD 和 DWORD_PTR

转载 作者:可可西里 更新时间:2023-11-01 14:14:03 24 4
gpt4 key购买 nike

为了支持 Win64 的 64 位寻址,Windows API 添加了一些 *_PTR 类型。

SetItemData(int nIndex,DWORD_PTR dwItemData)

当我将第二个参数作为 DWORD 传递时,此 API 适用于 64 位和 32 位机器。

我想知道,如果我将第二个参数作为 DWORD 传递,这个特定的 API 在 64 位机器上是否会失败。如何测试失败场景?

谢谢,尼克尔

最佳答案

如果您传递 DWORD,该函数不会失败,因为它适合 DWORD_PTR。但是,在 64 位平台上,指针保证适合 DWORD_PTR不会适合 DWORD

因此,这段代码是正确的:

int *before_ptr = new int;
yourListBox.SetItemData(index, (DWORD_PTR) before_ptr);
int *after_ptr = (int *) yourListBox.GetItemData(index);
ASSERT(before_ptr == after_ptr); // Succeeds.
delete after_ptr; // Works.

但是这段代码是错误的,会默默地将指针截断到它的低 32 位:

int *before_ptr = new int;
yourListBox.SetItemData(index, (DWORD) before_ptr);
int *after_ptr = (int *) yourListBox.GetItemData(index);
ASSERT(before_ptr == after_ptr); // Fails.
delete after_ptr; // Undefined behavior, might corrupt the heap.

关于windows - 64 位机器上的 DWORD 和 DWORD_PTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5867904/

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