Возможно, DLL выгружает саму себя, но это может привести к сбою процесса, который законно загрузил DLL, если этот процесс позже вызовет функцию в DLL.
Ссылка, на которую вы ссылаетесь, описывает Внедрение DLL , где код DLL загружается как часть адресного пространства процесса с целью перехвата вызовов, которые процесс делает к функциям.в других «законных» DLL.Обычно это делается «скрытно».то есть процесс, чьи вызовы перехватываются и перенаправляются, не знает о внедрении DLL.
Таким образом, ссылка относится к дополнительным функциям, которые используются в редких случаях.
Вам также интересно, что делать, еслизагружаемая вами DLL генерирует исключение.Вы должны быть в состоянии поймать его, но может не потребоваться выгрузить DLL.На всех платформах есть специфичные вызовы для выгрузки общей библиотеки.Так что да, вы можете сделать это.Однако было бы необычно выгружать DLL только потому, что она вызвала исключение.Обычно он работает нормально, но может вызвать проблемы, если другой поток в вашем процессе все еще использует код в этой DLL (об этом вы, очевидно, должны знать).
Краткий ответ: да, вы можете выгрузить DLL, если вы ее явно загрузили.Просто подумайте, когда лучше всего выгружать его.
Windows:
LoadLibrary()
FreeLibrary()
GetProcAddress()
Unix / Linux:
dlopen()
dlclose()
dlsym()
PS: я использую один термин, DLL в моем ответе ссылается на общие библиотеки в Windows и Linux.