当前位置: 首页 > news >正文

QT----QAxObject在子线程中调用,发现excel指针为空

问题描述

excel操作耗时,想把它放入子线程,但是放入子线程后,运行发现在pWorkbooks指针就是空的,而不放入子线程,程序能够正常运行

QScopedPointer<QAxObject> pExcel(new QAxObject("Excel.Application"));if (!pExcel){RYLog::getInstance()->appendLog("Error: Failed to create Excel Application object. Is Excel installed?");return;}pExcel->setProperty("Visible", false);// 获取工作簿集合  使用QScopedPointer智能指针可以在作用域结束时自动释放指针QScopedPointer<QAxObject> pWorkbooks(pExcel->querySubObject("Workbooks"));if (!pWorkbooks){RYLog::getInstance()->appendLog("Error: Failed to get Workbooks object from Excel.");pExcel->dynamicCall("Quit()"); // 退出Excel进程return;}

问题解决

头文件引用#include "windows.h",并在创建excel的代码前边加上CoInitializeEx(NULL, COINIT_MULTITHREADED);代码就能够运行
Qt 的主线程默认是 STA,所以不需要自己手动调用。但你在子线程使用 COM(例如 QAxObject)时必须手动初始化!

它是 Windows COM(Component Object Model)初始化函数,它的作用是 在当前线程中初始化 COM 库,并指定使用的并发模型。COM 是微软提供的一套组件对象模型,很多 Windows API(比如 Excel 自动化、Shell 操作、DirectShow 等)都基于 COM。要在程序中使用 COM 对象(如 QAxObject 访问 Excel),就必须先初始化 COM。

http://www.dtcms.com/a/317276.html

相关文章:

  • NCD57080CDR2G 安森美onsemi 通用驱动器, SOIC, 8针, 20V电源, 8 A输出NCD57080CDR2电流隔离式栅极驱动器
  • Excel制作尖刀图,直观展示业绩涨跌
  • 【Excel】通过Index函数向下拖动单元格并【重复引用/循环引用】数据源
  • Unity模型显示在UI上
  • mysql 8递归查询
  • AMD二季度净利润同比下降31%
  • 企业级建模平台Sparx EA的云服务实现全域架构协同
  • imx6ull-驱动开发篇11——gpio子系统
  • django permission_classes = [AllowAny] 如何限制到具体接口
  • 得物向量数据库落地实践
  • 智慧二次供水管理系统解决方案:城市供水“最后一公里”
  • 【面试场景题】电商秒杀系统的库存管理设计实战
  • Docker swarm 常用的命令集合
  • 线轨矫平机:让“钢轨”变直的幕后物理课
  • 移动端网页调试实战,跨设备兼容与触控交互问题排查全流程
  • SassSCSS:让CSS拥有超能力的预处理器
  • `<dependencyManagement>`内部的`<dependencies>`和外部的`<dependencies>`的区别:
  • Spring Boot全局异常处理与日志监控实战指南
  • 浙江大学PTA程序设计C语言基础编程练习题6-10
  • Python爬虫实战:研究Photon工具,构建企业信息收集系统
  • 【Java】HashMap的key可以为null吗?如何存储的?
  • 线性代数中矩阵的基本运算运算
  • 【图像处理基石】浅谈3D城市生成中的数据融合技术
  • 分布式微服务--GateWay(1)
  • 【注意】HCIE-Datacom华为数通考试,第四季度将变题!
  • 基于Hadoop的木鸟民宿数据分析与可视化、民宿价格预测模型系统的设计与实现
  • OpenKruise
  • Linux《进程间通信(上)》
  • Git 乱码文件处理全流程指南
  • 记一次ORACLE ORA-00600 [19004] 错误的分析与解决方法