gpt4 book ai didi

c++ - hwnd 设置高位是否正常?

转载 作者:行者123 更新时间:2023-11-28 01:51:05 28 4
gpt4 key购买 nike

我正在将我的 HWND 传递给一个子流程,这样它就可以向我发送有关其进度的消息。有时我从未收到来自子流程的任何消息。在调查过程中,我发现我传递给子进程的 GetSafeHwnd() 似乎返回了我不期望的值。

例如:0xffffffffa5400382

基于此,我可能可以推断出我没有将该值正确地转换为 int64/string 或从 int64/string 正确转换。我可以解决这个问题。但我觉得奇怪的是这个 hwnd 看起来不对?

是否存在 HWND 可以设置高位的情况?这是一个普通的窗口,还是 hwnd 有什么特别的地方会变成这样?

我使用的是 C++,这是一个基于 CDialog 的应用程序窗口。

最佳答案

您看到的结果来自 sign extension句柄值的 64 位整数。实际句柄值为 0xa5400382,因为 handle values are always in the 32-bit range ,即使进程是 64 位的!

因此您应该将 HWND 转换为 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 block 是必需的,因为 std::stoul()如果转换失败可能会抛出异常。

关于c++ - hwnd 设置高位是否正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43012454/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com