Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Вопрос по exe и dll файлам.


Автор: AndreySol 29.7.2005, 06:49
Есть ли еще способ получить HMODULE файла (имея путь к exe или dll файлу) кроме ф-ций LoadLibrary и LoadLibraryEx.
Если можно, с примерами кода.

Автор: chaos 29.7.2005, 08:14
посмотри LoadModule

Автор: JoyEx 29.7.2005, 08:46
Спасет GetModuleHandle() и GetModuleHandleEx()

Автор: AndreySol 3.8.2005, 06:32
насчет GetModuleHandle() я так понял, что она возвращает HMODULE для библиотек уже загруженных в память, а мне так не подходит.
Мне тут на другом форуме подсказали про CoLoadLibrary() - но не могу заставить ее работать. Делал так:
Код

// инициализируем COM
CoInitialize(NULL);
//подготавливаем путь к файлу
CString NameFileOpen = "c:\\windows\\calc.exe";
WCHAR* wcFile = NULL;
char* szFileName = NameFileOpen.GetBuffer(NameFileOpen.GetLength());
USES_CONVERSION;
wcFile = A2W(szFileName);

HINSTANCE hExe = CoLoadLibrary(wcFile, FALSE);
if(hExe == NULL)
{
    MessageBox("Ошибка загрузки модуля !", "", MB_OK | MB_ICONERROR);
    CoFreeLibrary(hExe);
}

CoFreeLibrary(hExe);
// закрываем COM
CoUninitialize();

Что у меня неправильно ?

Автор: Earnest 3.8.2005, 06:47
CoLoadLibrary не любую библиотеку загружает. У нее должны быть специальные точки входа, не помню сейчас, как называются - предназначены для инициализации com-функций. И чем тебя LoadLibrary не устраивает? CoLoadLibrary сначала использует LoadLibrary (Ex) для загрузки библиотеки, а потом проводит дополнительную инициализацию.
ЗЫ
Если библиотека не загрузилась, какой смысл вызывать CoFreeLibrary? Что, по твоему, система может сделать с нулевым хандлом?

Автор: AndreySol 4.8.2005, 06:11
Earnest
Цитата

не любую библиотеку загружает

а так же и exe-шники.
Вот этим мне LoadLibrary (Ex) и не нравится.
Ведь должен же быть способ получить HMODULE для любого exe или dll файла !

Автор: Earnest 4.8.2005, 06:30
LoadLibraryEx загружает любую DLL или EXE. Если тебе это нужно для выполнения кода - может не получиться, т.к. при загрузке модуль пытается разрешать ссылки. Но если для выкапывания ресурсов или чего-то в этом роде - ставь флаг DONT_RESOLVE_REFERENCES, и все загрузится.

Автор: Nastya 5.8.2005, 10:44
А зачем тебе незагруженная dll или exe? Я могу найти одну причину разбор заголовка.
Посмотри может что из этого поможет
http://www.rsdn.ru/article/baseserv/peloader.xml
http://www.rsdn.ru/?article/baseserv/peloader.xml

Автор: AndreySol 12.8.2005, 06:32
Загруженная DLL или EXE мне нужна для использования ресурсов - LoadIcon, LoadCursor и т.п.
А вообще я пытаюсь решить проблему загрузки и получения HMODULE для любого DLL или EXE файла, а LoadLibrary(Ex) с этим не справляется.
Насчет использования LoadLibrary(Ex) с флагом DONT_RESOLVE_REFERENCES у меня в плане загрузки файлов картина получилась аналогично обычной LoadLibrary - к примеру стандартный Калькулятор(c:\windows\calc.exe) не загружается.
За ссылки спасибо, щас буду разбираться.

Автор: JoyEx 12.8.2005, 09:56
Цитата(AndreySol @ 12.8.2005, 06:32)
Загруженная DLL или EXE мне нужна для использования ресурсов - LoadIcon, LoadCursor

Зачем заново "придумывать колесо"?
Воспользуйся LoadImage(,,,LR_LOADFROMFILE)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)