COM - что именно _pAtlModule-> Lock () блокирует точно? - PullRequest
1 голос
/ 14 сентября 2010

Я работаю над тем, чтобы научиться писать элемент управления COM.У меня есть пример проекта, и он использует строки

_pAtlModule->Lock()
_pAtlModule->Unlock()

в обработчике OnCreate () и OnDestroy () для элемента управления COM соответственно.

Я понимаю, что_pAtlModule является экземпляром CAtlModule - объекта «application» (для лучшего описания).

Но, на мой вопрос.Что именно блокирует _pAtlModule-> Lock ()?Я знаю, что это критический раздел, но что он защищает?

Должен ли я блокировать и разблокировать объект _pAtlModule при записи моих элементов управления COM?

спасибо!

Ответы [ 2 ]

1 голос
/ 14 сентября 2010

См. этот ответ на аналогичный вопрос Эта функция предназначена для управления так называемым "счетчиком блокировок" внутрипроцессной библиотеки DLL COM-сервера.Вместе с DllCanUloadNow() счетчик блокировок предотвращает выгрузку DLL до тех пор, пока ее код и данные больше не будут использоваться.

1 голос
/ 14 сентября 2010

На первый взгляд, это, похоже, не делает ничего существенного!

MSDN говорит: «Увеличивает количество блокировок и возвращает обновленное значение; это может быть полезно для отладки и трассировки».

http://msdn.microsoft.com/en-US/library/9syc2105%28v=VS.80%29.aspx

Я думаю, что это вводит в заблуждение, однако поведение предназначено для предотвращения выгрузки модуля. Я предполагаю, что это некоторая атомарная ценность, которая используется как якорь блокировки (из-за отсутствия лучшего термина!).

...