无法使用 LoadIcon WINAPI 从资源中加载图标

Posted

技术标签:

【中文标题】无法使用 LoadIcon WINAPI 从资源中加载图标【英文标题】:Can't load icon from resources using LoadIcon WINAPI 【发布时间】:2015-01-12 08:53:56 【问题描述】:

为什么这行代码在visual c++中不起作用

_icon = LoadIcon(GetModuleHandle(NULL) ,MAKEINTRESOURCE(IDI_ICON1));

我检查了 rc 文件和 resource.h,图标定义在那里 rc文件

IDI_ICON1               ICON                    "resources\\close.ico"

资源.h

#define IDI_ICON1                       101

我在静态库中使用此代码,因此 HINSTANCE 与 exe 相同,对吗? 但我总是收到 ERROR_RESOURCE_TYPE_NOT_FOUND 错误。

【问题讨论】:

你是否包含了静态库的 .res 文件? 我猜不是,应该怎么做? 在链接器选项中有附加依赖项。请注意,静态库中的资源 ID 可能与您项目的 resource.h 中定义的 ID 冲突 谢谢它的工作,你应该把它作为答案 这里使用GetModuleHandle(NULL)是错误的。首先,您可以通过传递NULL 来实现相同的目的。如果您仔细阅读文档,您就会知道。但其次,考虑一下如果将代码编译成 DLL 会发生什么。始终使用包含代码的模块的模块句柄。 【参考方案1】:

使用链接器选项中的其他依赖项包含静态库的 .res 文件。请注意,静态库中的资源 ID 可能与您项目的 resource.h 中定义的 ID 冲突

【讨论】:

以上是关于无法使用 LoadIcon WINAPI 从资源中加载图标的主要内容,如果未能解决你的问题,请参考以下文章

WinAPI - 从 DLL 加载资源

Windows API一日一练 20 LoadString LoadIcon和LoadCursor函数

如何在c ++ winapi中获取活动文件资源管理器窗口的路径

Win10深色主题——如何在WINAPI中使用?

在纯 WinAPI 中从内存缓冲区播放声音

为啥我使用 WinAPI C++ 录制的声音无法正常播放?