鱼C论坛

 找回密码
 立即注册
查看: 98|回复: 3

编译器

[复制链接]
发表于 2025-1-15 20:39:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
VS2022 这么用hOldBrush = SelectObject(hdc, hBrush);报错误不能将(HGDIOBJ)类型的值分配到(HBRUSH)类型的实体
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-1-15 20:40:11 | 显示全部楼层
这是由于 SelectObject 函数返回的是 HGDIOBJ 类型,而 hOldBrush 被定义为了 HBRUSH 类型,两者类型不匹配。

解决方法是将返回值强制类型转换为 HBRUSH
hOldBrush = (HBRUSH)SelectObject(hdc, hBrush);

注意强制类型转换需要小心使用,确保类型是匹配的,避免引发潜在错误。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-15 20:43:17 | 显示全部楼层
FishC 发表于 2025-1-15 20:40
这是由于 SelectObject 函数返回的是 HGDIOBJ 类型,而 hOldBrush 被定义为了 HBRUSH 类型,两者类型不匹配 ...

为什么课件教学时不用强制类型转换
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-1-15 20:43:30 | 显示全部楼层
1006150804 发表于 2025-01-15 20:43
FishC 发表于 2025-1-15 20:40
这是由于 SelectObjec ...


这个问题的原因在于编译器版本和语言标准的不同。Visual Studio 的不同版本对类型转换的要求存在一些差异,同时新的编译器会进行更严格的类型检查。

在较早的开发环境(例如旧版本的 VS 或课程演示时使用的编译器)中,编译器可能默认允许从 HGDIOBJ 隐式转换为 HBRUSH,不会抛出类型不匹配的错误。所以在教学课件中可以省略强制类型转换。

而在新的编译器(如 VS2022)中,为了提高代码的安全性,类型检查变得更加严格,因此需要显式地进行强制类型转换。

总结:  
1. 老版编译器: 类型转换可能是隐式允许的。  
2. 新版编译器: 强调类型安全,必须进行显式转换。

如果代码需要兼容现代编译器,将返回值强制转换为目标类型是更为可靠的解决方案。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-30 16:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表