当前位置:  开发笔记 > Android > 正文

在DLL中使用IXMLDocument需要CoInitialize?

如何解决《在DLL中使用IXMLDocument需要CoInitialize?》经验,为你挑选了1个好方法。

CoInitialize在使用IXMLDocument(msxml包装器)时,是否有理由在我的DLL函数中使用?(或其他com对象)

调用应用程序/线程是否负责调用CoInitialize/CoUninitialize

如果我ComObj在我的DLL中使用它CoInitialize在其初始化部分和CoUninitialize其终结部分中自动调用该怎么办?



1> David Heffer..:

调用应用程序/线程是否负责调用CoInitialize/CoUninitialize?

是.作为一般规则,线程的创建者必须负责初始化COM.这意味着从DLL公开的函数不应该为调用它们的线程初始化COM.

原因是,如果你把在调用该DLL的线程,初始化COM责任则该地方的不合理限制在该线程的创建者.如果线程的创建者需要执行另一个需要初始化COM的操作,该怎么办?标准做法是DLL指定COM初始化作为其要求之一.在DLL的文档中,声明调用者必须初始化COM.

这里有更多细节:你不应该做的事情,第2部分:Dlls不能在应用程序的线程上调用CoInitialize*.

这就是为什么你不应该在调用者的线程上初始化你的DLL中的COM.还有更多的理由不在初始化部分初始化COM.初始化部分在DLL内部执行DllMain.您可以在内部调用很少的东西DllMain,COM函数不在允许的操作列表中.更多细节:在你的DllMain中没有做任何可怕事情的一些原因,第3部分.

如果我在我的DLL中使用ComObj,它在其初始化部分自动调用CoInitialize并在其终结部分中自动调用CoUninitialize,该怎么办?

ComObj单位不这样做.对于DLL,将引用您引用的COM初始化代码.包括ComObj将强制COM在可执行项目中初始化,但不在库中.


嗯,是.如果不是IsLibrary,则添加到init procs的代码受到保护.在不初始化COM的情况下,可以在DLL中使用`ComObj`.我知道我这样做.
推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有