簡體   English   中英

設置高位設置是否正常?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM