uintptr_t 与 DWORD_PTR 的用法

Usage of uintptr_t vs DWORD_PTR

两者都用于存储地址和进行指针运算,都在 WinAPI 中定义,我什么时候应该使用 uintptr_t (cstdint) 与 DWORD_PTR (Windows.h)?在x86和x86_64中分别是32位和64位

A DWORD_PTR is an unsigned long type used for pointer precision. It is used when casting a pointer to an unsigned long type to perform pointer arithmetic. DWORD_PTR is also commonly used for general 32-bit parameters that have been extended to 64 bits in 64-bit Windows.

我不打算让我的代码具有可移植性,我受困于 WinAPI。 什么类型是最佳用例?

Prefer uintptr_t it is part of the C++ standard as of C++11 and later. DWORD_PTR 特定于 Visual C++,因此不可移植。

虽然 Visual C++ 可能会选择将 uintptr_t 实现为 DWORD_PTRunsigned long,这取决于他们,但坚持使用标准库更安全.

uintptr_t(在 C++ 中实际上是 std::uintptr_t)是 not 在 WinAPI 中定义的,它是在标准 C++ 头文件 <cstdint> 中定义的。标准C++库由C++语言定义,与WinAPI无关

如果您想使用该类型与 WinAPI 进行交互,请使用 DWORD_PTR,因为这是 WinAPI 函数所期望的。

对于其他用途,完全由您决定。我更喜欢标准类型而不是特定于平台的类型,所以我会使用 std::uintptr_t,但两者都可以。