Использование DLL
Допустим моя программа написанная на С++ использует функции какогото DLL после выполнения какойто части кода ей больше эти функции не нужны. Можно ли отгузить этот DLL не завершая работы прогмы ? И если можно то как ?
У меня такой вопрос.
Допустим моя программа написанная на С++ использует функции какогото DLL после выполнения какойто части кода ей больше эти функции не нужны. Можно ли отгузить этот DLL не завершая работы прогмы ? И если можно то как ?
А какой процедурой вы подключали DLL? К ней должна быть парная процедура - для отключения. Например, для AfxLoadLibrary будет AfxFreeLibrary. Смотрите в MSDN.
А какой процедурой вы подключали DLL? К ней должна быть парная процедура - для отключения. Например, для AfxLoadLibrary будет AfxFreeLibrary. Смотрите в MSDN.
Да никакакой особой процедуры как бы и небыло
dll был создан как Regular Dll using shared MFC и в проект включался его
*.h с оглавлением экспортируемых функций и *.lib который создался вместе с самим Dll. И вобще всё писалось так как будто код Dll находится в проекте exe.
Да никакакой особой процедуры как бы и небыло
dll был создан как Regular Dll using shared MFC и в проект включался его
*.h с оглавлением экспортируемых функций и *.lib который создался вместе с самим Dll. И вобще всё писалось так как будто код Dll находится в проекте exe.
Сначала получите с помощью GetModuleHandle дескриптор вашей библиотеки и передайте его функции FreeLibrary.
Сначала получите с помощью GetModuleHandle дескриптор вашей библиотеки и передайте его функции FreeLibrary.
так, вроде бы сработает, но вообще, грамотнее динамически подключать/отключать библиотеку (LoadLibrary/GetProcAddress/FreeLibrary) без использования *.lib
так, вроде бы сработает, но вообще, грамотнее динамически подключать/отключать библиотеку (LoadLibrary/GetProcAddress/FreeLibrary) без использования *.lib
OK Я покапался немного в MSDN и разобрался с
LoadLibrary и GetProcAddress Даже работает :)
Но появился ещё вопрос : Можно ли таким же способом загрузить целый класс ?
OK Я покапался немного в MSDN и разобрался с
LoadLibrary и GetProcAddress Даже работает :)
Но появился ещё вопрос : Можно ли таким же способом загрузить целый класс ?
Нельзя, GetProcAddress о существовании классов не подозревает.
так, вроде бы сработает, но вообще, грамотнее динамически подключать/отключать библиотеку (LoadLibrary/GetProcAddress/FreeLibrary) без использования *.lib
А почему отказ от использования LIB файлов более грамотен :???:
А почему отказ от использования LIB файлов более грамотен :???:
использование lib обеспечивает статическую линковку, а LoadLibrary/FreeLibrary - динамическое подключение. ИМХО для динамического отключения ("Можно ли отгузить этот DLL не завершая работы прогмы") нужно использовать динамическое подключение. Просто ради структурной целостности программы.
Кстати еще поэтой теме:
существуют т.н. Delay Loaded функции. Это статически линкованные функции, однако библиотека содержащая их загружается только при первом вызове такой функции и может быть затем выгружена спец. функцией. Это судя по всему какое-то расширение Microsoft. см. в MSDN "Linker Support for Delay-Loaded DLLs"
или по ключевым словам
/DELAYLOAD
delayimp
__FUnloadDelayLoadedDLL2