赞
踩
在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库已经被初始化且传入参数设置的并发模式和本次不同
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。