Серверы вне процесса и IClassFactory :: LockServer ()
COM добавляет неявный вызов LockServer с TRUE для объекта класса, когда он маршалирует интерфейс IClassFactory инеявный вызов LockServer с FALSE, когда клиент освобождает интерфейс IClassFactory.Следовательно, нет необходимости в удаленных вызовах LockServer обратно на сервер, и прокси-сервер для LockServer просто возвращает S_OK без фактического повторного вызова.
Процесс должен выполняться до тех пор, пока объект класса не будет освобожден как (raw) COM не предусматривает какой-либо механизм тайм-аута.Так что да, пока вы -> интерфейс объекта класса Release (), который вы приобрели с помощью CoGetClassObject (), серверный процесс (размещенный dll или exe) будет продолжать работать.Поведение не имеет ничего общего с классами, созданными объектом класса (фабрикой), поскольку на них ссылаются отдельно.
FWIW, Извлеченный интерфейс также не должен быть IClassFactory.Это может быть какая-то пользовательская реализация, поэтому вы можете делать что-то за пределами хорошо известных интерфейсов, которые предоставляет COM.Я нахожу странным, что CoGetClassObject вызывается вместо CoCreateInstance (Ex), так как вызов CoGetClassObject () действительно инструмент специального назначения для создания нескольких объектов.Я никогда не обнаруживал себя использующим объект класса, или прозвища, или дюжину других поведений, которые поддерживал COM.DCOM, COM +, OLE, конечно, но не низкоуровневое сырье.