Файлы ресурсов VC ++ и длинные строковые ресурсы - PullRequest
2 голосов
/ 25 марта 2009

В нашем приложении есть строки ресурсов, которые явно слишком длинны для компилятора. Сборка ломается, утверждая, что «длина строки слишком велика». Я нашел мало информации о теме длинных строковых ресурсов и даже с трудом находил ограничение для такой строки ресурсов. В конце концов я нашел эту статью, которая дает ограничение: MSDN .

Был ли у вас опыт работы с лимитами на строковые ресурсы?
Есть ли способ объединить их без какого-либо кодирования?

Любые другие предложения будут очень признательны.

Ответы [ 5 ]

1 голос
/ 25 марта 2009

Я бы посмотрел на 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);
}
0 голосов
/ 06 апреля 2009

Вы не можете использовать файлы ресурсов для хранения ваших длинных строк.

Вместо этого вы можете поместить все свои огромные строки, скажем, в XML-файл и читать строку, когда вам нужно. Если вам нужна поддержка NLS, у вас также могут быть языковые файлы.

0 голосов
/ 04 апреля 2009

Вам необходимо использовать пользовательские данные (RCDATA), чтобы избежать такого ограничения. В основном, используя двоичное поле, компилятор оставляет ваши данные в покое и не пытается их «массировать». С другой стороны, если у вас есть строковые ресурсы, они могут быть объединены (для экономии места, если вы установили эту опцию компилятора) и хранятся обычно в специальном разделе изображения. Таким образом, вы хотите избежать всего этого и сказать компилятору «просто хранить» ваши данные. Используйте RCDATA, у вас уже есть пример кода для его извлечения.

0 голосов
/ 03 апреля 2009

Вы можете встроить текстовый файл в ресурс, загрузить его и использовать внутри CString.

0 голосов
/ 28 марта 2009

Строковые ресурсы предназначены для хранения по существу связанных с пользовательским интерфейсом ресурсов и сообщений, которые должны быть показаны пользователю; таким образом, приложение может быть интернационализировано, переключаясь с одной DLL, содержащей строки для языка A, на другую DLL, содержащую те же идентификаторы строк для другого языка B. Я рекомендую проверить, для каких целей вы используете строковые ресурсы. Если вы собираетесь хранить большие данные, используйте пользовательский двоичный ресурс в RC. Позже вы можете интерпретировать это как хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...