IClassFactory :: LockServer有什么意义?

Mar*_*tin 7 com

为什么IClassFactory :: LockServer在我看来IClassFactory :: AddRef/IClassFactory :: Release可以实现相同的目标?

Chr*_*son 5

这在Don Box的书籍Essential COM中有详细解释.

AddRef/Release在类对象的IClassFactory接口上通常是进程外COM服务器中的空方法.这是因为服务器在调用时会维护对类对象的内部引用CoRegisterClassObject,因此"正常"进程内服务器实现AddRef/Release会导致类对象上的引用计数总是超过1,服务器也不会知道什么时候打电话CoRevokeClassObject.

COM运行时调用后IClassFactory::LockServer,它调用对类对象的外部引用CoGetClassObject.以这种方式,可以基于外部引用的存在或否则来适当地控制服务器进程寿命.