从x64目标版本的“ OLE_HANDLE”转换为“ HICON”的正确方法是什么?
特别是对于普通的C-Style强制转换,使用x64配置进行编译时会收到以下警告:
警告C4312:“类型转换”:从“ OLE_HANDLE”转换为更大尺寸的“ HICON”
这是有问题的代码:
imgList.Add((HICON)ohIcon);
上面的代码对我来说很好用,但是在为x64构建时我想摆脱警告。
H放弃了它,在这种情况下,库代码创建了一个独特的类型,为您提供了更多的类型安全性(在旧的C API时代)。
它们实际上都是HANDLE,这是一个内核对象,实际上并不关心资源是什么,只是您拥有一个“句柄”。请记住,API是C语言的,所以请使用C样式强制转换,而要删除它时,请使用DeleteObject()。
编辑:64位eh ...问题是因为MS将句柄更新为64位,但没有处理OLE。幸运的是,他们所做的就是用零填充额外的位。
尝试使用LongToHandle转换例程,并参阅MIDL移植指南 -向下滚动大约一半到“ USER和GDI句柄是符号扩展的32b值”部分。