vc++资源编译器(RC)选项/n ..

VC++ Resource Compiler (RC) option /n ...?

本文关键字:选项 RC 资源 编译器 vc++      更新时间:2023-10-16

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

/n:在字符串表中添加null

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

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

谢谢。

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()的返回值)要容易得多。