首页 > 解决方案 > 从主线程询问运行对象表 (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 位编译。

我不明白为什么它与主线程不同。

帮助将不胜感激。

标签: c++qtmingwqthreadole

解决方案


因为您的线程函数在调用 GetRunningObjectTable 之前没有调用CoInitializeCoInitializeEx 。

这可能会从一个线程工作

void func_in_thread()
{
    CoInitializeEx(nullptr,COINIT_MULTITHREADED);

    IRunningObjectTable *rot = nullptr;
    qDebug() << GetRunningObjectTable(0, &rot);

    CoUninitialize();
}

推荐阅读