Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Использование DLL

1.8K
25 февраля 2004 года
scanf
72 / / 10.12.2003
У меня такой вопрос.
Допустим моя программа написанная на С++ использует функции какогото DLL после выполнения какойто части кода ей больше эти функции не нужны. Можно ли отгузить этот DLL не завершая работы прогмы ? И если можно то как ?
461
25 февраля 2004 года
gerard
102 / / 20.12.1999
Цитата:
Originally posted by scanf
У меня такой вопрос.
Допустим моя программа написанная на С++ использует функции какогото DLL после выполнения какойто части кода ей больше эти функции не нужны. Можно ли отгузить этот DLL не завершая работы прогмы ? И если можно то как ?



А какой процедурой вы подключали DLL? К ней должна быть парная процедура - для отключения. Например, для AfxLoadLibrary будет AfxFreeLibrary. Смотрите в MSDN.

1.8K
25 февраля 2004 года
scanf
72 / / 10.12.2003
Цитата:
Originally posted by gerard


А какой процедурой вы подключали DLL? К ней должна быть парная процедура - для отключения. Например, для AfxLoadLibrary будет AfxFreeLibrary. Смотрите в MSDN.




Да никакакой особой процедуры как бы и небыло
dll был создан как Regular Dll using shared MFC и в проект включался его
*.h с оглавлением экспортируемых функций и *.lib который создался вместе с самим Dll. И вобще всё писалось так как будто код Dll находится в проекте exe.

3.2K
25 февраля 2004 года
srd
50 / / 31.08.2003
Цитата:
Originally posted by scanf



Да никакакой особой процедуры как бы и небыло
dll был создан как Regular Dll using shared MFC и в проект включался его
*.h с оглавлением экспортируемых функций и *.lib который создался вместе с самим Dll. И вобще всё писалось так как будто код Dll находится в проекте exe.



Сначала получите с помощью GetModuleHandle дескриптор вашей библиотеки и передайте его функции FreeLibrary.

401
25 февраля 2004 года
Br@in RIPper
289 / / 15.02.2003
Цитата:
Originally posted by srd


Сначала получите с помощью GetModuleHandle дескриптор вашей библиотеки и передайте его функции FreeLibrary.



так, вроде бы сработает, но вообще, грамотнее динамически подключать/отключать библиотеку (LoadLibrary/GetProcAddress/FreeLibrary) без использования *.lib

1.8K
25 февраля 2004 года
scanf
72 / / 10.12.2003
Цитата:
Originally posted by Br@in RIPper


так, вроде бы сработает, но вообще, грамотнее динамически подключать/отключать библиотеку (LoadLibrary/GetProcAddress/FreeLibrary) без использования *.lib




OK Я покапался немного в MSDN и разобрался с
LoadLibrary и GetProcAddress Даже работает :)
Но появился ещё вопрос : Можно ли таким же способом загрузить целый класс ?

3.2K
26 февраля 2004 года
srd
50 / / 31.08.2003
Цитата:
Originally posted by scanf



OK Я покапался немного в MSDN и разобрался с
LoadLibrary и GetProcAddress Даже работает :)
Но появился ещё вопрос : Можно ли таким же способом загрузить целый класс ?



Нельзя, GetProcAddress о существовании классов не подозревает.

3.2K
26 февраля 2004 года
srd
50 / / 31.08.2003
Цитата:
Originally posted by Br@in RIPper


так, вроде бы сработает, но вообще, грамотнее динамически подключать/отключать библиотеку (LoadLibrary/GetProcAddress/FreeLibrary) без использования *.lib



А почему отказ от использования LIB файлов более грамотен :???:

401
26 февраля 2004 года
Br@in RIPper
289 / / 15.02.2003
Цитата:
Originally posted by srd


А почему отказ от использования LIB файлов более грамотен :???:



использование lib обеспечивает статическую линковку, а LoadLibrary/FreeLibrary - динамическое подключение. ИМХО для динамического отключения ("Можно ли отгузить этот DLL не завершая работы прогмы") нужно использовать динамическое подключение. Просто ради структурной целостности программы.

Кстати еще поэтой теме:
существуют т.н. Delay Loaded функции. Это статически линкованные функции, однако библиотека содержащая их загружается только при первом вызове такой функции и может быть затем выгружена спец. функцией. Это судя по всему какое-то расширение Microsoft. см. в MSDN "Linker Support for Delay-Loaded DLLs"
или по ключевым словам
/DELAYLOAD
delayimp
__FUnloadDelayLoadedDLL2

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог