当前位置:   article > 正文

Qt在线程中操作excel问题解决_qaxbase::setcontrol: requested control excel.appli

qaxbase::setcontrol: requested control excel.application could not be instan

问题描述

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

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

分析

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

HRESULT CoInitializeEx(
void * pvReserved,
DWORD dwCoInit
);
  • 1
  • 2
  • 3
  • 4

解决

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

CoInitializeEx(NULL, COINIT_MULTITHREADED);
  • 1

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/170555
推荐阅读
相关标签
  

闽ICP备14008679号