DWORD和DWORD_PTR在64位机器上

为了支持Win64的64位寻址,在Windows API中添加了几个*_PTRtypes。

 SetItemData(int nIndex,DWORD_PTR dwItemData) 

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

我想知道,如果这个特定的API将在64位机器上失败,如果我通过第二个参数为DWORD 。 我如何testing失败情况?

谢谢,Nikhil

Solutions Collecting From Web of "DWORD和DWORD_PTR在64位机器上"

如果您传递一个DWORD ,该函数将不会失败,因为它适合DWORD_PTR 。 但是,一个指针可以保证在DWORD_PTR适合,但不能在64位平台上适用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.