Управление временем жизни COM-объекта в службе ATL - PullRequest
2 голосов
/ 12 ноября 2010

Я пытаюсь осмыслить концепцию написания службы Windows с использованием ATL.

Я создал проект и понимаю, что могу переопределить функции CAtlServiceModuleT, чтобы удовлетворить свои потребности в службе.

Я хотел бы, чтобы служба создала COM-объект (называемый диспетчером), который занимается планированием и выполнением заданий.

Как я могу создать один экземпляр моего COM-объекта, который будет доступен в течение всего жизненного цикла службы, работающей со всеми заданиями?

Я предполагаю написание клиентской программы, которая вызывает функции на интерфейсах, предоставляемыхДиспетчер, для создания / чтения / обновления / удаления заданий.

Я думаю, что служба не будет создавать объект диспетчера, пока моя клиентская программа не подключится к нему - и когда последний клиент отключится от него, COM будетуничтожить менеджера - тем самым убив его способность обрабатывать задания.

Любая хорошая документация по этому вопросу будет принята!

Обновление:

Было бы так же просто, как вызвать CoCreateInstance изпроизнесите переопределенную версию CAtlServiceModuleT :: Run (), а затем, когда служба завершит работу, сделав окончательный вызов Release?!

1 Ответ

2 голосов
/ 12 ноября 2010

Вы можете использовать CComClassFactorySingleton для создания такого объекта.

...