【发布时间】:2014-05-12 19:20:52
【问题描述】:
使用 CLSCTX_LOCAL_SERVER 的 CoCreateInstance 是否足以确保所有应用程序都使用在第一个 CoCreateInstance 期间加载的 COM 对象的相同实例?
【问题讨论】:
使用 CLSCTX_LOCAL_SERVER 的 CoCreateInstance 是否足以确保所有应用程序都使用在第一个 CoCreateInstance 期间加载的 COM 对象的相同实例?
【问题讨论】:
不,由服务器决定,客户端对此没有发言权。
服务器在注册其类工厂时使用REGCLS enumeration。使用 REGCLS_SINGLEUSE,客户端中的下一个 CoCreateInstance() 调用将启动另一个服务器。你想要 REGCLS_MULTIPLEUSE。
【讨论】:
不,每次调用 CoCreateInstance 都会创建一个新对象。
如果您希望每个进程共享同一个对象,则必须创建另一个类作为您要共享的对象的工厂。
让所有客户端共享同一个对象的另一种方法是使您的对象成为代理对象,该对象遵循服务器 EXE 中的单例。
【讨论】: