里面的字符串 ID。代码中无法识别 RC 文件

String ID inside .RC file is not recognized in code

提问人:Tracer 提问时间:11/7/2023 更新时间:11/9/2023 访问量:25

问:

我正在使用 C++ Builder 11.2,并将以下文件添加到我的项目中:strings.rc

#define ID_TESTSTRING    1

STRINGTABLE
BEGIN
    ID_TESTSTRING,   "Just for testing"
END

在我的(Unit1.cpp)中,我使用以下代码:Form1

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    wchar_t resString[100];
    LoadString(HInstance, ID_TESTSTRING, resString, 100); // undeclared identifier ID_TESTSTRING!
    ShowMessage(resString);
}

问题是我收到这个“未声明的标识符”错误。如果我用它的数值常量替换,那么一切都按预期工作。为什么标识符无法识别?因为,我想在我的代码中使用 ID,而不是它们的数值常量。ID_TESTSTRING1

C++Builder 资源字符串

评论

2赞 Some programmer dude 11/7/2023
标识符不会自动“导出”,也不会在所有源文件中创建为标识符。您需要将宏定义放在单独的头文件中,该文件同时包含在资源和 C++ 源文件中。ID_TESTSTRING
0赞 Tracer 11/7/2023
@Someprogrammerdude是的,这成功了。我以为我无法在 .rc 文件中包含标头。谢谢!
2赞 Remy Lebeau 11/8/2023
@Someprogrammerdude应该作为答案发布

答:

3赞 Some programmer dude 11/8/2023 #1

标识符不会自动“导出”,也不会在所有源文件中创建为标识符。

您需要将宏定义放在单独的头文件中,该文件包含在资源和 C++ 源文件中。ID_TESTSTRING

资源.rh

#define ID_TESTSTRING    1

资源.rc

#include "resources.rh"

STRINGTABLE
BEGIN
    ID_TESTSTRING,   "Just for testing"
END

单位1.cpp

#include "resources.rh"

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    wchar_t resString[100];
    LoadString(HInstance, ID_TESTSTRING, resString, 100);
    ShowMessage(resString);
}