powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / DLL явная загрузка
7 сообщений из 7, страница 1 из 1
DLL явная загрузка
    #33298681
kickdown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблема в следующем. После того, как DLL загрузилась, все отработало,
вызываю FreeLibrary - прога виснет и все. Что я делаю не так?
...
Рейтинг: 0 / 0
DLL явная загрузка
    #33299311
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одно из двух:
1) В FreeLibrary отдаешь неверный хендл
2) DLL требует перед завершением своей работы вызова какой-то dll_finish() процедуры.
...
Рейтинг: 0 / 0
DLL явная загрузка
    #33299542
kickdown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хендл тот же, а что есть dll_finish() процедура?
...
Рейтинг: 0 / 0
DLL явная загрузка
    #33299548
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда DLL начинает работать она может (не обязательно конечно, но может) выделить себе собственную память, занять самостоятельно какие-то ресурсы потребные для внутренних нужд DLL. Обычно такие DLL имеют в себе пару функций, одна для выделения памяти, другая для освобождения. Они могут называться по разному, например init/fini, или dll_load/dll_unload или что-нибудь вроде.
...
Рейтинг: 0 / 0
DLL явная загрузка
    #33299749
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОни могут называться по разному, например init/fini, или dll_load/dll_unload или что-нибудь вроде.

Эта функция называется DllMain
RTFM DLL_PROCESS_ATTACH, DLL_PROCESS_DETACH
...
Рейтинг: 0 / 0
DLL явная загрузка
    #33302048
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) авторОни могут называться по разному, например init/fini, или dll_load/dll_unload или что-нибудь вроде.
Эта функция называется DllMain
RTFM DLL_PROCESS_ATTACH, DLL_PROCESS_DETACH
Нет, дорогой мой Глюк. DllMain это процедура которая может выполнять все вышеописаные действия, но она не обязательна существует в dll. Если она существует, то ее обычно вызывает сама система во время LoadLibrary/FreeLibrary. Пользовательская программа может даже не знать что в dll есть такая процедура.
Но кроме DllMain во многих dll делают еще и процедуры "пользовательского уровня" для инициализации и шатдауна dll. Иногда эти процедуры являются врапперами, а иногда даже и алиасами для DllMain.
...
Рейтинг: 0 / 0
DLL явная загрузка
    #33302350
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kickdownпроблема в следующем. После того, как DLL загрузилась, все отработало,
вызываю FreeLibrary - прога виснет и все. Что я делаю не так?

Ты не имеешь право вызывать FreeLibrary, когда код библиотеки еще работает.
Надо сначала выйти из стека наружу библиотеки. Так например, если есть окно, код которого находится в некой DLL, то можно было бы например делать
типа такого :
Код: plaintext
1.
2.
3.
4.
5.
CMyFineWindow::PostNCDestroy()
{
  delete this;
  ::FreeLibrary(g_hMyFineLibrary);
}

Но это непаравильно.
Нужно изображать что-то типа
Код: plaintext
1.
2.
3.
4.
5.
CMyFineWindow::PostNCDestroy()
{
  delete this;
  ::PostMessage(g_hMainWindow, WM_USER_FREE_LIBRARY, g_hMyFineLibrary);
}
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / DLL явная загрузка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]