[英]Cannot convert from uint32_t* to LPDWORD
我正在嘗試調用Windows API函數GetExitCodeProcess
,它將LPDWORD
作為其第二個參數。
根據MSDN , LPDWORD
是指向無符號32位值的指針。 所以我試圖傳遞一個uint32_t*
,但編譯器(MSVC 11.0)對它不滿意:
錯誤C2664:'GetExitCodeProcess':無法將參數2從'uint32_t *'轉換為'LPDWORD'
static_cast
也無濟於事。 這是為什么? 在這種情況下使用reinterpret_cast
是否安全?
從文檔 :
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.