假设我的应用程序在启动时调用CoInitialize,在它存在之前调用CoUninitialize.
假设我有一个第三方组件,我的应用程序使用并做类似的事情,这会导致某种失败吗?
可以在提交呼叫时调用CoInitialize吗?第二次通话会失败吗?或者它只是"让它通过",因为它已被调用.
CoInitialize
S_FALSE
如果它已在调用线程中初始化,则返回.然而,对于同时返回调用S_OK
,并S_FALSE
需要有一个CoUninitialize
电话.对此函数的调用次数进行计数,并且仅当与其CoUninitialize
相等的次数CoInitialize
实际上未初始化时才计算.
总而言之,第二次调用是无害的,并且不止一次调用这对函数也没有问题.
从根本上说,这是完全错误的,必须由拥有线程的代码调用CoInitialize()。如果它像进程内服务器一样运行并且不启动自己的线程,则它永远不是第三方的组件。
当然,如果不同意公寓类型,这可能并会出错。这是不能保证的,通常是选择STA,这需要注入消息循环。该组件不会执行此操作,这是主机的工作。如果单元类型不匹配,则需要封送接口指针。依靠选择的公寓类型时,它不会执行此操作。
归档时间: |
|
查看次数: |
4319 次 |
最近记录: |