假设我的应用程序在启动时调用CoInitialize,在它存在之前调用CoUninitialize。
假设我的应用程序使用了第三方组件并做了类似的事情,这会导致某种类型的失败吗?
是否可以在提交该呼叫时调用CoInitialize?第二次通话会失败吗?或者只是“让它通过”,因为它已被称为。
答案 0 :(得分:6)
CoInitialize
已在调用线程中初始化,则 S_FALSE
将返回S_OK
。但是,对于返回S_FALSE
和CoUninitialize
的调用,都需要进行CoUninitialize
调用。对此函数的调用次数进行计算,并且仅当CoInitialize
的数量等于{{1}}的次数时,它才会实际上取消初始化。
总而言之,第二次调用是无害的,并且调用这对函数不会有多次出现问题。
答案 1 :(得分:2)
这是根本错误的,CoInitialize()必须由拥有该线程的代码调用。如果它像进程内服务器一样并且不启动自己的线程,那么它永远不是第三方组件。
当然,如果不同意公寓类型,这可能会出错。这是它无法保证的,STA是通常的选择,需要泵送消息循环。该组件不会这样做,这是主持人的工作。如果公寓类型不匹配,那么它需要编组接口指针。当它依赖于它的公寓类型时,它不会做什么。