Как получить дескриптор модуля библиотеки ресурсов спутника? (c ++ visual studio) - PullRequest
3 голосов
/ 17 марта 2011

Мы переместили все наши строки в ресурсы (и спутниковые библиотеки DLL) для приложения MFC. Прямо сейчас основной язык включен в сам EXE, поэтому, когда я вызываю LoadString (), я могу просто передать дескриптор модуля exe.

Однако мне нужно сделать это универсальным - как получить универсальный дескриптор модуля и убедиться, что я загружаю строки из спутниковой DLL, если необходимо? Нам нужно получить соответствующий модуль для загруженной в данный момент библиотеки ресурсов. (или exe, если английский)

Метод :: LoadString () принимает дескриптор в качестве первого аргумента - и мы просто используем дескриптор текущего исполняемого файла.

Нужно ли мне определять, нужно ли мне загружать DLL или Windows автоматически делает это для меня. Из документов, которые я прочитал, не ясно.

Это означает, что MFC делает это автоматически . Так как мне получить этот модуль?

Ответы [ 3 ]

5 голосов
/ 17 марта 2011

После того, как вы загрузили dll ресурсов с помощью LoadLibrary, вы сохраняете его HMODULE (возвращаемый LoadLibrary) и передаете его функции LoadString (а также другим функциям ресурсов).

Кстати, если вы используете свои ресурсы DLL исключительно для хранения ресурсов (т.е. в них нет кода), вы можете загрузить их с помощью LoadLibraryEx с опцией LOAD_LIBRARY_AS_DATAFILE, делая загрузку немного быстрее и избегая возможности эксплойты из-за вредоносного кода, встроенного в библиотеки ресурсов (но в этом случае будьте осторожны с диалогами ).

1 голос
/ 17 марта 2011

Использовать AfxGetResourceHandle ().

1 голос
/ 17 марта 2011

Вы загружаете библиотеку с помощью LoadLibrary (Ex)? Помните ручку, которую он возвращает.

В противном случае используйте GetModuleHandle («Имя модуля ресурсов»).

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