to post messages and comments.

← All posts tagged dll

У библиотек на языках, транслируемых в машинные коды, часто вижу такую проблему, что их нельзя выгрузить. И программисты, и компиляторы относятся к создаваемым разделяемым библиотекам так, будто они в адресном пространстве навсегда. Delphi все строковые литералы размещает в сегменте «только для чтения» с отрицательным счётчиком ссылок. А выгрузи такую библиотеку — и все такие строки ломаются к чертям, хотя, если перенести в кучу, то они бы там успешно пережили выгрузку. Ленивая подгрузка библиотек сделана так, что они подгружаются, но не выгружаются обратно в случае выгрузки основной.

А без нормальной выгрузки не будет перезагрузки на лету.

edll.sourceforge.net
Вот такая шняга есть под Windows. Умеет подгружать в рантайме статические и динамические библиотеки. Особенно интересно последнее. Если системному LoadLibrary() нужен непременно файл на файловой системе, то кастомный загрузчик, наверное, и из виртуального файла загрузить DLL устроило бы. Например, из инкрустированного в .exe байтового потока. Или из удалённого HTTP сервера, попутно перехватив FileOpen у подгруженной библиотеки, чтоб она и файлы читала оттуда же.