【问题标题】:Warning when casting int to HWND将 int 转换为 HWND 时发出警告
【发布时间】:2017-09-30 22:22:46
【问题描述】:

我有一个我正在用 C++ 为 Win64 编写的程序,它是从父程序执行的,并且需要将其父窗口设置为父程序的窗口。父程序将HWND 作为命令行参数传入,我将参数解析为int(使用stoi()),然后再转换为HWND。我的代码的简化版本如下所示:

int parentHwnd = stoi(args[HWND_INDEX]);
SetParent(childHwnd, (HWND) parentHwnd);

但是,我在编译时遇到以下错误:

warning C4312: 'type cast': conversion from 'int' to 'HWND' of greater size

是否有安全的方法将int 转换为HWND 并消除此错误?或者我是否应该将给定的命令行 arg 解析为 int 以外的其他内容,以便安全地转换为 HWND

【问题讨论】:

标签: c++ windows casting hwnd


【解决方案1】:
  1. 当传递指针/句柄时,你应该使用std::stoull
  2. 并使用显式转换HWND parentHwnd = (HWND)std::stoull(args[HWND_INDEX]);

【讨论】:

  • 不确定我是否了解签名/未签名如何适用于此。
  • 天啊!今天必须半睡半醒;我第一次是对的。您将参数解释为无符号的 64 位值,如果父级是 32 位,这将不会可靠地工作,因为当您 should be sign-extending it 时,效果是零扩展句柄。将其作为有符号值而不是无符号值传递将始终有效。
猜你喜欢
  • 2017-01-12
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
相关资源
最近更新 更多