QT在子线程中使用QAxWidget需要初始化COM的问题

来源:互联网 发布:有关网络犯罪的例子 编辑:程序博客网 时间:2024/05/16 08:23

最近碰到一个在子线程中使用QAxWidget不成功的问题,问题显示如下:

CoCreateInstance failure (尚未调用 CoInitialize。)QAxBase::setControl: requested control Excel.Application could not be instantiatedQAxBase::dynamicCallHelper: Object is not initialized, or initialization failed


这个问题在网上很少有解决办法的具体代码,既然我解决了就整理出来分享给大家把。


出现这个问题的原因是在QApplication的主线程中,会自动初始化COM库,而新开辟的子线程不会自动初始化COM库,所以需要我们手动来初始化。

方法如下:

添加头文件

#include <windows.h>
在线程开始的时候初始化COM库:

HRESULT r = OleInitialize(0);if (r != S_OK && r != S_FALSE){    qWarning("Qt:初始化Ole失败(error %x)",(unsigned int)r);}
使用结束后需要释放掉:
OleUninitialize();


这样就能成功运行了。

0 0