谁负责调用 CoInitialize 和 CoUninitialize 如果
1- 我在代理进程中托管了一个 COM dll(通过使用 dcomcnfg 实用程序或 COM+ 向导)?
2- 我构建了一个包含 COM 对象的 ISAPI DLL?
不知道情况 2,但在情况 1 中,代理进程肯定会调用CoInitialize()
/ CoUninitialize()
。我是这样知道的。
我们有一个在 COM+ 中托管的 COM 对象,它本身使用 MS XML 4。当您需要在 MS XML 4 中创建 XML 文档对象时,您调用CoCreateInstance()
. 我们从不调用CoInitialize()
我们的 COM 对象,但文档创建总是成功的——当然是代理调用CoInitialize()
。如果我们在独立应用程序中执行相同操作,除非我们自己调用CoInitialize()
.
所以底线是:COM+ 代理(我确信这也适用于 DCOM 代理)调用CoInitialize()
自身。
顺便说一句,您可以使用它来调查案例 2 -CoCreateInstance()
在 ISAPI dll 中调用 - 如果它成功CoInitialize()
已经被调用。