我正在尝试调用Windows API函数GetExitCodeProcess
,它将LPDWORD
作为其第二个参数。
根据MSDN,LPDWORD
是指向无符号32位值的指针。所以我尝试传递uint32_t*
,但编译器(MSVC 11.0)对它不满意:
错误C2664:'GetExitCodeProcess':无法将参数2从'uint32_t *'转换为'LPDWORD'
static_cast
也无济于事。这是为什么?在这种情况下使用reinterpret_cast
是否安全?
答案 0 :(得分:6)
<强> DWORD 强>
32位无符号整数。范围是0到4294967295十进制。 此类型在IntSafe.h中声明如下:
typedef unsigned long DWORD;
所以,LPDWORD
是unsigned long int*
。但是你试图通过unsigned int*
。我知道类型指向大小相同的变量,但指针类型不兼容。
解决方案是声明类型为DWORD
的变量,并传递该变量的地址。像这样:
DWORD dwExitCode;
if (!GetExitCodeProcess(hProcess, &dwExitCode))
{
// deal with error
}
uint32_t ExitCode = dwExitCode;