在主线程和工作线程中加载动态库(内部调用COM dll)有什么区别?

时间:2017-12-20 09:25:18

标签: com

任何正文都可以告诉我在主线程和工作线程中加载动态库(内部调用COM dll)之间有什么区别。

提前致谢

1 个答案:

答案 0 :(得分:0)

大多数情况下,由于应用程序开发语言的支持,主线程上几乎不需要使用COM。
例如,使用项目创建向导检查OLE / COM选项 但是,在工作线程中使用多个工作线程并使用COM时,需要执行以下操作。

使用COM的工作线程必须在线程的开头初始化OLE(在创建/使用COM对象之前) 对于Win32 API,它是CoInitialize() / CoInitializeEx()
或者,根据应用程序开发语言,将有相同的函数和库,所以请调用它。

使用COM的工作线程必须独立于负责UI的主线程执行的Windows消息处理循环执行自己的消息处理循环。

请注意正在使用的COM组件 如果注册COM组件的ThreadingModel in the registry的值为空字符串(未设置任何内容),则可能不会向工作线程通知事件,并且可能会引发异常。
如果此注册表中没有任何价值,请写下#34; Apartment"。

请基本上仅从创建的线程中使用COM对象 如果从另一个不是创建COM对象的线程的线程调用COM对象,则可能发生错误或者可能无法执行正常操作。

附加说明:
为了终止工作线程,有必要进行上述清理 终止并释放COM对象,停止消息处理循环,调用CoUnintialize(),等等 必须终止/释放在工作线程中创建/分配的资源。