【问题标题】:How do I share a a resource DLL containing icons between Windows 7 and XP?如何在 Windows 7 和 XP 之间共享包含图标的资源 DLL?
【发布时间】:2012-06-20 02:02:32
【问题描述】:

我有一个项目,其中包含一些图标、位图和字符串,这些图标、位图和字符串嵌入到用于 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 报告该文件不包含图标。如果我将它们复制过来,XP 自己加载 ico 文件没有问题,所以我不认为它们的格式不好,除非资源编译器以某种方式破坏它们。如果我查看资源编辑器中的图标,它应该显示为 16x16 32 位 BMP 文件。

【问题讨论】:

    标签: winapi windows-xp embedded-resource


    【解决方案1】:

    当您创建 MUI 解决方案时,您的资源被分为与语言无关的 DLL(通常包含图标、清单等)和特定于语言的 DLL(通常包含字符串、对话框等)

    来自MSDN:“Windows Vista 之前的资源加载函数(例如 LoadString、LoadIcon、LoadBitmap、FormatMessage 等)不支持 MUI。”

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

    【讨论】:

    • 他们不知道 MUI,但是如果您将句柄传递给特定于语言的 DLL,它们仍然可以工作(我将使用有关如何获取该句柄的更多信息来更新问题)。我已经验证这在字符串和位图方面有效。只有图标(所有这些都设置为特定于区域设置)不显示。我已经验证,除了 MUI 和清单部分之外,语言中性 DLL 或主 exe 中没有任何资源,所以我的语言环境特定 DLL 正在加载,但图标部分有一些不正确的地方。跨度>
    • @MilesStrombach:很公平。图标是如何编码的? Windows Vista 引入了对包含 PNG 编码数据的图标的支持。你说图标文件在 XP 上工作,但也许资源编译器正在将它们压缩成 PNG?资源编辑器是否告诉您 DLL 中的图标是什么格式?如果没有,请在资源编辑器中打开 DLL,将图标另存为 .ico,在记事本中打开,查看是否包含字母“PNG”。
    • 我使用了几个不同的资源提取器,它们提取的所有图标看起来都像 32 位 BMP 并且缺少 PNG 标头。
    【解决方案2】:

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

    【讨论】:

    • 感谢发布解释。
    猜你喜欢
    • 2023-04-07
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多