Нельзя помещать ресурсы в файлы .lib. (Надеюсь ты мог бы). Вы должны хранить файлы .rc и включать их в файл .rc приложения, когда ссылаетесь на lib.
И поэтому вы должны убедиться, что ни один из идентификаторов ресурсов, используемых .lib, также не используется приложением. Это полный беспорядок, но лучшего решения нет, если вы используете .rc файлы для своих строк. и придерживайтесь инструментов Microsoft.
Примерно пару лет назад я так расстроился из-за этого ограничения, что ушел и создал инструмент, который превратил бы скомпилированный файл ресурсов (.res) в файл .obj, чтобы я мог включить его в свою библиотеку. Конечно, когда вы делаете это, вы больше не можете использовать LoadString
, но оказывается, что написание собственного кода для анализа фрагмента данных .res и поиска строк не так уж сложно. Поэтому мое текущее решение для размещения строк в библиотеках -
- create framework.rc
- скомпилируйте его в framework.res
превратить framework.res в framework.obj, который содержит внешние символы
const BYTE framework_res[];
const size_t framework_res_size;
использовать MyLoadString(framework_res, framework_res_size, iStringId, sz, 256)
вместо LoadString при извлечении строк в библиотеке.
Одним из преимуществ такого способа оказалось то, что когда я писал свою собственную LoadString, я мог возвращать указатель на строку ресурса, а не копировать ее. поэтому моя настоящая функция LoadString выглядит следующим образом.
LPCWSTR MyFindString(framework_res, framework_res_size, iStringId);
Если вы скомпилируете ваш файл .rc с параметром / n, он завершит все строки пустым значением.