coinitialize(Null);
{
_In_opt_ LPVOID pvReserved, //parameters
_In_ DWORD dwCoIn
Coinitializeex(Null);
{
_In_opt_ LPVOID pvReserved,
_In_ DWORD dwCoInit
}
你能简单解释一下吗?
答案 0 :(得分:3)
致电
CoInitialize(NULL);
相当于调用
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
因此,如果您的应用程序首先调用CoInitialize(NULL)
及之后(在同一个帖子中)CoInitializeEx(NULL, COINIT_MULTITHREADED)
,那么这相当于
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
CoInitializeEx(NULL, COINIT_MULTITHREADED);
通常,COM库仅在线程上初始化一次。在同一个线程上对CoInitialize或CoInitializeEx的后续调用将成功,只要它们不尝试更改并发模型,但将返回S_FALSE。
在您的情况下,您正在尝试更改并发模型,因此调用将失败。
如果在致电CoInitializeEx()
之前未使用COM,并且您无法删除之前对CoInitialize()
的通话,则可以尝试在两者之间拨打CoUninitialize()
。< / p>
另请注意,每个线程都有COM初始化,因此使用不同的线程可能会有另一种解决方法。
如果您可以将通话更改为CoInitialize()
,只需将其替换为
CoInitializeEx(NULL, COINIT_MULTITHREADED);