VC ++资源文件和冗长的字符串资源

时间:2009-03-25 16:47:13

标签: c++ resources

在我们的应用程序中,我们的资源字符串对于编译器来说显然太长了。构建中断表示“行长度过长”。我发现很少有关于冗长字符串资源主题的信息,甚至很难找到这种资源字符串的限制。最后我发现这篇文章给出了限制: MSDN

您对字符串资源有任何限制吗?
有没有办法在没有编码的情况下将这些连接起来?

任何其他建议都会非常适合。

5 个答案:

答案 0 :(得分:1)

我会看看RCDATA资源。我用它在我的应用程序中存储大文本文件。

编辑:这是我的MFC代码,它应该能够给你一些指示。

CString CWSApplication::LoadTextResource(UINT nID)
{
    HRSRC hResInfo;
    HGLOBAL hResData;
    hResInfo = ::FindResource(AfxGetResourceHandle(),
                              MAKEINTRESOURCE(nID),
                              RT_RCDATA);

    if ( hResInfo == NULL )
    {
        return CString();
    }

    hResData = ::LoadResource(NULL, hResInfo);

    if ( hResData == NULL )
    {
        return CString();
    }

    char *data = (char*)(::LockResource(hResData));
    DWORD len = ::SizeofResource(NULL, hResInfo);
    return CString(data, len);
}

答案 1 :(得分:0)

字符串资源旨在存储基本上与UI相关的资源和消息,以便向用户显示;这样一个应用程序可以国际化从一个包含语言A的字符串的DLL切换到包含另一个语言B的相同字符串ID的另一个DLL。我建议您查看使用字符串资源的目的。如果要存储大数据,请在RC中使用自定义二进制资源。稍后您可以根据需要进行解释。

答案 2 :(得分:0)

您可以将文本文件嵌入到资源中,加载它并在CString中使用它。

答案 3 :(得分:0)

您需要使用自定义数据(RCDATA)来避免此类限制。基本上通过使用二进制字段,编译器会单独保留数据,而不会尝试“按摩”它。另一方面,如果你有字符串资源,它们将被合并(为了节省空间,如果你设置了那个编译器选项)并且通常存储在图像的特殊部分中。因此,您希望避免所有这些并告诉编译器“只存储”您的数据。使用RCDATA,您已经有示例代码来提取它。

答案 4 :(得分:0)

您不能使用资源文件来存储冗长的字符串。

相反,您可以将所有大字符串放入XML文件中,并在需要时读取字符串。如果您需要NLS支持,您还可以使用特定于语言的文件。