欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt在线程中操作excel问题解决

程序员文章站 2024-02-24 13:43:58
...

问题描述

在qt界面主线程中使用QAxObject类对excel进行操作时,功能均正常,当将代码移植到子线程中使用时,出现错误。错误提示如下:

QAxBase::setControl: requested control Excel.Application could not be instantiated
QAxBase::dynamicCallHelper: Object is not initialized, or initialization failed

分析

查阅资料后发现,在调用COM库中的函数之前,需要先将COM库初始化。初始化COM库我们需要使用windows提供的API函数CoInitializeEx,函数原型如下:

HRESULT CoInitializeEx(
void * pvReserved,
DWORD dwCoInit
);

解决

在项目中引入#include “Windows.h”
在调用COM库函数之前,增加代码:

CoInitializeEx(NULL, COINIT_MULTITHREADED);

COINIT_MULTITHREADED为const 枚举,表示组件进入进程唯一的MTA套间。
返回值:
S_OK :COM库初始化成功。
S_FALSE :当前线程上,COM库已经被初始化。
RPC_E_CHANGED_MODE :COM库已经被初始化且传入参数设置的并发模式和本次不同

相关标签: qt qt excel