coinitialize(Null);
{
_In_opt_ LPVOID pvReserved, //parameters
_In_ DWORD dwCoIn
Coinitializeex(Null);
{
_In_opt_ LPVOID pvReserved,
_In_ DWORD dwCoInit
}
Run Code Online (Sandbox Code Playgroud)
你能简单解释一下吗?
打电话
CoInitialize(NULL);
Run Code Online (Sandbox Code Playgroud)
相当于调用
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
Run Code Online (Sandbox Code Playgroud)
因此,如果您的应用程序首先调用CoInitialize(NULL)然后稍后(在同一线程中)CoInitializeEx(NULL, COINIT_MULTITHREADED),这将等效于
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
CoInitializeEx(NULL, COINIT_MULTITHREADED);
Run Code Online (Sandbox Code Playgroud)
该文件指出
通常,COM 库仅在线程上初始化一次。在同一线程上对 CoInitialize 或 CoInitializeEx 的后续调用将成功,只要它们不尝试更改并发模型,但将返回 S_FALSE。
在您的情况下,您正在尝试更改并发模型,因此调用将失败。
如果在调用 之前未使用 COM CoInitializeEx(),并且您无法删除之前对 的调用CoInitialize(),则可以尝试CoUninitialize()在两者之间调用。
另请注意,COM 初始化是针对每个线程进行的,因此也许可以使用不同的线程进行另一种解决方法。
如果您可以将调用更改为CoInitialize(),只需将其替换为
CoInitializeEx(NULL, COINIT_MULTITHREADED);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4374 次 |
| 最近记录: |