воскресенье, 26 апреля 2009 г.

Когда SHLoadInProc выгружает DLL?

Это перевод When does SHLoadInProc unload a DLL? Автор: Реймонд Чен.

Функция SHLoadInProc просит оболочку (Explorer) загрузить экземпляр конкретного CLSID. Это приводит к загрузке DLL, ответственной за этот CLSID.

Но когда эта DLL выгружается? (прим. пер.: ок, сейчас в MSDN уже добавили ответ на этот вопрос, но раньше его, видимо, не было)

Ну, это одна из тех маленьких загадок, которые вы должны решить сами, просто немного подумав об этом.

Посмотрите: объект создаётся вызовом CoCreateInstance и сразу же освобождается. Вот и всё. Explorer теперь совершенно не волнует ваша DLL.

Можете ли вы, теперь с такой подсказкой, ответить на вопрос: когда выгружается DLL?

Всё ещё не знаете? Вот другая подсказка: теперь этот вопрос уже не в компетенции оболочки. Теперь это вопрос COM.
Когда выгружается любая DLL, загруженная CoCreateInstance?


Ответ: DLL периодически опрашивается, безопасно ли её сейчас выгружать. Как только DLL ответит утвердительно (с помощью S_OK), COM выгрузит её.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.

Примечание. Отправлять комментарии могут только участники этого блога.