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中的资源字符串在程序中加载后不完全可见的主要内容,如果未能解决你的问题,请参考以下文章