[英]Is it normal for an hwnd to have its high bit set?
我將HWND傳遞給子流程,以便它可以向我發送有關進度的消息。 有時,我從子流程中從未收到任何消息。 在調查過程中,我發現我傳遞給子流程的GetSafeHwnd()似乎返回的值不是我所期望的。
例如:0xffffffffa5400382
基於此,我可能可以推斷出我沒有正確地將值轉換為int64 / string。 我可以解決。 但是我發現奇怪的是,這個hwnd看起來不正確嗎?
HWND是否可以設置高位? 這是正常的窗口,還是hwnd的某些特殊之處最終會導致這種情況?
我在C ++中,這是一個基於CDialog的應用程序窗口。
您看到的結果是將句柄值的符號擴展為64位整數。 實際的句柄值為0xa5400382
,因為即使進程為64位, 句柄值也始終在32位范圍內 !
因此,您應該將HWND
std::uint32_t
轉換為std::uint32_t
並將其轉換為字符串(或者反過來)。
將HWND轉換為wstring:
HWND hwnd = GetSafeHwnd();
std::uint32_t handleValue = reinterpret_cast<std::uint32_t>( hwnd );
std::wstring handleValueStr = std::to_wstring( handleValue );
將wstring轉換為HWND:
try
{
std::uint32_t handleValue = std::stoul( someString );
HWND handle = reinterpret_cast<HWND>( handleValue );
}
catch( std::exception& e )
{
// Handle string conversion error
}
需要try / catch塊,因為如果轉換失敗, std::stoul()
可能會引發異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.