如何在Windows 7和XP之间共享包含图标的资源DLL?

时间:2012-06-20 02:02:32

标签: winapi windows-xp embedded-resource

我有一个项目,为了MUI的目的,在资源DLL中嵌入了一些图标,位图和字符串。这些都在Windows 7中完美运行,但只有字符串和位图在XP中工作。我正在使用VS2012在Windows 7上构建应用程序,使用Visual Studio 2010(v100)作为实际工具集。

由于XP本身不支持MUI,因此我根据this article on MSDN的步骤5.1c和5.2以编程方式获取适当资源DLL的句柄。

在XP上从我的资源尝试使用LoadImage作为我的图标后,GetLastError的结果是1813,或者是ERROR_RESOURCE_TYPE_NOT_FOUND。在同一资源句柄上调用位图或LoadString的LoadImage可以正常工作,实际上,我的字符串和位图会在适当的位置出现。

我注意到了一些事情:如果我尝试通过打开我的应用程序的DLL设置快捷方式的图标Windows 7没有问题,但Windows XP报告该文件不包含图标。如果将ico文件复制过来,XP加载ico文件没有问题,所以我不认为它们格式不好,除非资源编译器以某种方式修改它们。如果我查看资源编辑器中的图标,它将显示为16x16 32位BMP文件,应该如此。

2 个答案:

答案 0 :(得分:1)

当您创建MUI解决方案时,您的资源将在语言中立的DLL(通常包含图标,清单等)和特定于语言的DLL(通常包含字符串,对话框等)之间拆分。

来自MSDN:" Windows Vista之前的资源加载功能(如LoadString,LoadIcon,LoadBitmap,FormatMessage等)不支持MUI。"

您的字符串和图标可能不在同一个DLL中,XP也不会去寻找它们。我链接的文章解释了如何使MUI在Windows XP上运行。

答案 1 :(得分:1)

我的问题是由VS2012以某种方式引起的。我不确定在VS2010中使用VS2010工具构建资源DLL与使用VS2010工具在VS2012中构建它们之间有什么区别,但有一个。