Может ли кто-нибудь дать объяснение или ссылку, объясняющую, как именно STRINGTABLE в файле ресурсов MFC определен и может быть вручную расширен?MFC - Вручную развернуть stringtable
Я попытался это сделать, но не смог сделать это в многопроектном решении. Большинство проектов в упомянутом решении имеют свои собственные файлы ресурсов и переименованы в файлы resource.h.
Когда приложение пытается получить доступ к строковым ресурсам, появляется сообщение об ошибке «Строка ресурсов для« 22392 «не найдена». 22392 - это идентификатор строки, которую я пытался создать. Я не получаю подобное сообщение об ошибке, если вместо этого использую уже определенный идентификатор строки.
Использование мастера Visual Studio 2010 для добавления ресурса строки также не работает. Но он корректно отображается в списке символов ресурса и в редакторе таблицы строк.
Излишне говорить, что я не участвовал в создании этого решения.
Благодарим за помощь.
[EDIT1]
я исключил возможность конфликта путем выполнения «найти в файлах» для значения, используемого и при использовании других значений, а также: 22390, 22391, 22393, 22394, 22395. Всегда есть тот же результат.
[EDIT2]
я повторил шаги, которые я сделал в комплексном решении в новом, чистом и простое приложение MFC с одним проектом, и она работала без проблем. Поэтому я полагаю, что моя проблема связана с тем, что решение имеет несколько проектов и ресурсов.
шаги были следующие:
- Выберите свободный номер в resource.h (который называется по-разному в моем случае) и добавьте #define IDS_XXX свободный номер.
- Подтвердите выбранное число, выполнив с ним «найти в файлах».
Добавьте строку в STRINGTABLE в resource.h, желательно рядом с IDS_ со значением, близким к тому, которое я выбрал.
STRINGTABLE BEGIN IDS_OTHER "I have a number close to XXX" IDS_XXX "HelloHello" END
Доступ строка в программе:
CString strMyString; strMyString.LoadString(IDS_XXX); AfxMessageBox(strMyString, MB_YESNO | MB_ICONEXCLAMATION);
[EDIT3]
Я пытался найти вызов LoadString, который вызывает сообщение об ошибке. LoadString, который не загружает мой строковый ресурс, находится в классе, который находится в том же проекте, что и файл ресурсов (.rc), содержащий указанный ресурс строки. Здесь генерируется сообщение об ошибке «Строка ресурсов для« 22392 »не найдена». Это объясняет, по крайней мере, почему я не нашел ничего такого.
[EDIT4]
я мог бы изолировать причину дальше.
В cstringt.h hInst является NULL аки строки Ressource не может быть найден:
_Check_return_ BOOL LoadString(_In_ UINT nID)
{
HINSTANCE hInst = StringTraits::FindStringResourceInstance(nID);
if(hInst == NULL)
{
return(FALSE); // goes here, but shouldn't, hInst == NULL
}
return(LoadString(hInst, nID));
}
Это странно, так как можно получить доступ к другой строке Ressource в пределах одного файла ресурса просто отлично.
Есть варианты запуска нумерации ресурсов, и я использовал их некоторое время назад для обработки набора DLL-расширений MFC. Я думаю, что они были в вариантах/ресурсах ... Извините, что у меня нет MSVC с MFC ... – CapelliC
@chac: Если вы предлагаете изменить существующую нумерацию ресурсов, это не может быть и речи , так как решение находится в разработке уже более десятилетия, и весь ад сломается, если я попробую что-то подобное. –