Я работаю над тем, чтобы сделать свои заявки международными. После двух дней копания на msdn я придумал тест, который загружает библиотеку для конкретного языка, содержащую ресурсы. Это также моя первая попытка загрузить библиотеку как ресурс, загрузить из нее строки и так далее.
Далее, в соответствии с примером msdn на http://msdn.microsoft.com/en-us/library/windows/desktop/dd319071%28v=VS.85%29.aspx, я пытаюсь загрузить LoadString.
Поскольку загрузка строк для всего приложения равняется большому количеству копирования текста, я подумал, что я бы использовал - как мне кажется, - функцию экономии памяти в LoadString, которая устанавливает параметр nBufferMax в ноль. Согласно документации LoadString, он должен возвращать указатель на строковый ресурс. Я думал, что сделаю структуру или класс строковых указателей и сделаю что-то вроде этого (я извлек только важные биты):
wchar_t textBuf[SOMEVALUE]; // <-- this is how id DOES work
wchar_t *myString; // <-- this is how i would like it
HMODULE resContainer=LoadLibraryEx(L"MUILibENU.dll",NULL, LOAD_LIBRARY_AS_DATAFILE);
if(0!=resContainer){
// this works OK
int copied=LoadStringW(resContainer,IDS_APP_TITLE,textBuf,SOMEVALUE);
// this fails, also gives a warning at compile time about uninitialized variable used.
int copied=LoadStringW(resContainer,IDS_APP_TITLE,myString,0);
}
Как вы можете видеть, я пытаюсь заставить myString стать указателем на строку загруженной библиотеки ресурсов, фактически ничего не копируя.
Мой вопрос: я неправильно понимаю документацию MSDN? Могу я или не могу получить указатель на строку непосредственно в загруженной библиотеке, а просто использовать ее позже, например, показать окно сообщения, фактически ничего не копируя? Пока я не выгружу указанную библиотеку?