无法从uint32_t *转换为LPDWORD

时间:2014-01-29 17:05:29

标签: c++ winapi casting

我正在尝试调用Windows API函数GetExitCodeProcess,它将LPDWORD作为其第二个参数。

根据MSDNLPDWORD是指向无符号32位值的指针。所以我尝试传递uint32_t*,但编译器(MSVC 11.0)对它不满意:

  

错误C2664:'GetExitCodeProcess':无法将参数2从'uint32_t *'转换为'LPDWORD'

static_cast也无济于事。这是为什么?在这种情况下使用reinterpret_cast是否安全?

1 个答案:

答案 0 :(得分:6)

来自documentation

  

<强> DWORD

     

32位无符号整数。范围是0到4294967295十进制。   此类型在IntSafe.h中声明如下:

typedef unsigned long DWORD;

所以,LPDWORDunsigned long int*。但是你试图通过unsigned int*。我知道类型指向大小相同的变量,但指针类型不兼容。

解决方案是声明类型为DWORD的变量,并传递该变量的地址。像这样:

DWORD dwExitCode;
if (!GetExitCodeProcess(hProcess, &dwExitCode))
{
    // deal with error
}
uint32_t ExitCode = dwExitCode;