这是COM多线程环境下我所遇到的第一个问题,谨此记录下来已被后忘。
问题大概这样:
一位同事在自己的组件中创建线程函数,在线程中调用我组件的方法,结果是间断性的发生CreateInstance失败,经过追查发现,在他的线程函数中开始和结束时没有初始化一个套件,即:没有调用CoInitialize(0)和CoUninitialize()方法,我的组件是CComSingleThreadModel模式,说明每个线程必须要有自己私有的套件。
首先感谢以下两篇文章:
1。msdn
全文在http://www.microsoft.com/china/MSDN/library/windev/COMponentdev/CDwickedtoc.mspx?mfr=true 总是调用 CoInitialize(Ex) 几个月前,我收到了一封朋友的电子邮件,他就职于一家著名的硬件公司。他的公司编写了一个非常复杂的基于 COM 的应用程序,其中使用了许多进程内和本地(进程外)的 COM 组件。在开始时,应用程序创建了 COM 对象以服务于运行在多线程单元 (MTA) 中的各种客户端线程。该对象还可以托管给 MTA,这意味着接口指针可以在客户端线程之间自由交换。在测试中,我的朋友发现在应用程序准备关闭之前,一切都进行得不错。然后,不知是什么原因,对 Release 的调用(必须执行此调用,以便正确释放客户端占用的接口指针)被锁定了。他的问题是:“到底是哪里出了问题?” 其实答案非常简单。应用程序的开发人员其他都做得很对,只有一点例外,而这点又非常重要:他们没有在所