最近碰到一个在子线程中使用QAxWidget不成功的问题,问题显示如下:
CoCreateInstance failure (尚未调用 CoInitialize。)
QAxBase::setControl: requested control Excel.Application could not be instantiated
QAxBase::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();
本文详细介绍了在Qt应用程序中遇到的子线程使用QAxWidget导致的CoCreateInstance失败问题,解释了原因并提供了解决方案。通过在子线程开始时初始化COM库,并在使用完毕后释放资源,可以成功解决该问题。

6068

被折叠的 条评论
为什么被折叠?



