c++ - 从主线程询问运行对象表 (ROT) 时出错
问题描述
我有这个方法来测试我是否成功获得 ROT:
void func()
{
IRunningObjectTable *rot;
qDebug() << GetRunningObjectTable(0, &rot);
}
主线程中的一切都很好,但不是在单独的线程中:
func(); // qDebug prints S_OK (0)
QFuture<void> future = QtConcurrent::run(func); // qDebug prints E_UNEXPECTED (0x8000FFFF)
使用 MinGW 5.3.0 32 位编译。
我不明白为什么它与主线程不同。
帮助将不胜感激。
解决方案
因为您的线程函数在调用 GetRunningObjectTable 之前没有调用CoInitialize或CoInitializeEx 。
这可能会从一个线程工作
void func_in_thread()
{
CoInitializeEx(nullptr,COINIT_MULTITHREADED);
IRunningObjectTable *rot = nullptr;
qDebug() << GetRunningObjectTable(0, &rot);
CoUninitialize();
}
推荐阅读
- algorithm - 查找整数是否存在于范围列表中
- javascript - 如何解析上传的 csv 文件?
- tensorflow - 如何在 tf2 中启用 grappler 的自动并行?
- sql-server - 获取 ms sql 中每一行的一个月前数据
- javascript - 使用大于“Number.MAX_SAFE_INTEGER”(9007199254740992)的数字模拟输入 type="number"?
- ios - 尝试在右上角格式化图像 - SwiftUI
- laravel - 如何在 Laravel Sail 上启用 SSL
- tensorflow - 如何修复添加的层必须是类Layer的实例。成立:
? - django - For login, request provides user details in Django
- python - 有没有办法在 Python 中使用变量中的字符串调用方法?