dll中的资源字符串在程序中加载后不完全可见

Posted

技术标签:

【中文标题】dll中的资源字符串在程序中加载后不完全可见【英文标题】:Resource string in dll not entirely visible after loading it in a program 【发布时间】:2014-01-09 13:04:23 【问题描述】:

我使用VS2008为某个程序(我没有它的源代码)制作了一个静态链接到MFC的C++ DLL插件。

将我的插件集成到软件后,一切正常,除了与我的插件名称相对应的字符串资源,我在资源文件中声明如下:

    STRINGTABLE  
    LANGUAGE 9, SUBLANG_DEFAULT
    BEGIN
        IDS_PRC_TEST "TEST"
    END 

然后我在“resource.h”头文件中定义了它:

    #define IDS_PRC_TEST            210

我的问题是在软件的插件列表中我只得到第一个 此字符串资源的字母来自“TEST”的“T”。

我验证了编译好的资源文件(.res),没问题

我也验证了我构建的dll,使用'Resedit'程序,资源都OK (“TEST”完全在 dll 中)

然后我将我的插件的资源与另一个插件的资源进行了比较 (随软件提供)名称完全出现的。没有区别 在资源声明之间。

所以我不明白为什么我的字符串资源没有完全加载,如果来自另一个插件的那个是。

如果不够清楚,请随时向我提问以澄清我的解释。

提前感谢您的回答。

【问题讨论】:

Unicode/多字节问题? 您可能需要删除相应的 .aps 和 .res 文件并重复您的步骤以重建 dll。我见过资源看似正确但不知何故不同步的情况,直到这两个文件被删除并重建。这通常是由于在资源编辑器之外手动更新资源造成的。 感谢您这么快回答。 - 在清单中,编码是 UTF-8(我不确定它是否是真实事件,但我尝试更改它但没有结果) - 我删除了所有文件并从头开始重建,结果是一样的。 我以错误的方式更改了字符集(直接在清单中)。我已经在项目属性中更改了它并且它工作了!非常感谢您的帮助! @Norbulak 应用程序清单中的encoding 属性指定manifest 文件使用的字符编码。它与用于编译源代码的字符编码无关。 【参考方案1】:

感谢 cmets 解决这个问题。这确实是一个 Unicode/多字节问题。所以我所要做的就是在 Project->Properties->Configuration properties->General

中更改项目的编码

【讨论】:

以上是关于dll中的资源字符串在程序中加载后不完全可见的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中加载后,我应该如何关闭 hdf5 文件?

图像在 iframe 中加载后未从缓存中加载

在 C# 中的自定义 appdomain 中加载 dll

在 WKwebView (SWIFT) 中加载本地资源以及 HTML 字符串?

带有CSS内容的div,伪元素后不可见

VC Dll 中的资源 使用