Могу ли я загрузить DLL таким образом, чтобы он мог быть удален во время загрузки? - PullRequest
4 голосов
/ 25 сентября 2011

Заголовок говорит сам за себяперезагрузите его.Я знаю, что могу сделать копию, загрузить копию и контролировать оригинал, но я подумал, что может быть лучше ... Если я правильно понял, DLL полностью загружена в память, поэтому не должно быть проблем при удалениифайл ..

Ответы [ 2 ]

9 голосов
/ 25 сентября 2011

Нет, Windows работает не так.Загрузка DLL просто создает файл с отображенной памятью, на самом деле ничего не читается из файла, кроме перемещений (при необходимости).Пока ваш код не вызовет экспортированную функцию.Что вызывает ошибку страницы, потому что код еще не был загружен.Теперь код читается из файла в оперативную память.Если для других процессов требуется место, страницы просто не отображаются.Повторная загрузка при следующей ошибке страницы.

MMF устанавливает жесткую блокировку файла.Вы можете только переименовать его, но не перезаписать или удалить.Это может привести к сбою программы.Снимите блокировку с помощью FreeLibrary ().

0 голосов
/ 25 сентября 2011

Не пробовал, сейчас я не на своей машине с Windows, но я думаю, что Windows блокирует файл от записи при загрузке DLL.Сначала вы должны проверить, можете ли вы перезаписать библиотеку DLL (например, путем компиляции новой версии) или компилятор жалуется на «разрешение запрещено».

В противном случае, я полагаю, вы можете использовать уведомление об изменении файла API для достижения вашей цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...