gpt4 book ai didi

c++ - VC++ 资源编译器 (RC) 选项/n ...?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:29 27 4
gpt4 key购买 nike

我刚刚阅读了 VC++ 2010 (rc.exe) 附带的资源编译器的可用命令行选项的描述,其中一个引起了我的注意:

/n:将空值附加到字符串表中的所有字符串

也许答案很明显,我只是没有考虑正确的道路,但这个选项什么时候相关?

首先,根据 MSDN 文档,字符串表中的字符串“只是以空字符结尾的 Unicode 或 ASCII 字符串,可以在需要时从可执行文件中加载”。其次,LoadString 的文档进一步指出该函数“从与指定模块关联的可执行文件中加载字符串资源,将字符串复制到缓冲区中,并附加一个终止空字符

谢谢。

最佳答案

STRINGTABLE 中的字符串通常不以零终止符结尾,而是 STRINGTABLE 的格式指定每个字符串前面都有字符串长度。通常 LoadString() 将字符串资源复制到应用程序提供的缓冲区中并附加零终止符。在那种情况下,您实际上不需要选项 /n

但是 LoadString()(或者更准确地说是 LoadStringW(),因为 ANSI 变体不能这样做)可以在您指定 时用于检索原始字符串资源0 作为缓冲区大小:

WCHAR* str;
int str_len;
str_len = LoadStringW(hInstance, ID_STRING, (LPWSTR) &str, 0);

在这种情况下,它只是将原始字符串资源的地址存储到映射到进程内存中的 str 中,并且不会发生字符串复制。显然 LoadLibrary() 实现根本无法添加终止符,这是资源编译器选项派上用场的时候,因为使用零终止字符串比使用字符串长度(的返回值)容易得多LoadLibrary()).

关于c++ - VC++ 资源编译器 (RC) 选项/n ...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7745076/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com