Qt-解决异常报错“QAxBase::setControl: requested control XXX could not be instantiated”

简介: Qt-解决异常报错“QAxBase::setControl: requested control XXX could not be instantiated”

问题说明

      使用Qt开发的过程中,QAxObject是经常用到的一个类,用于操作Windows中各种COM接口,进而实现各类功能。


      WbemScripting.SWbemLocator是我想要通过QAxObject访问的对象,使用下方代码,一般来说会完成实例化并继续执行后续操作。

QAxObject *objIWbemLocator = new QAxObject("WbemScripting.SWbemLocator");

   然而很多人会触发下方错误提示,翻译过来就是无法实例化请求的对象。

      经过我多方调研,查清了问题缘由,是因为COM未初始化导致。QAxObject既然用于操作COM接口,那COM的初始化也显得至关重要。

      解决问题的办法如下所示。

解决方案

      QleInitialize函数是一个Windows API函数。它的作用是在当前单元(apartment)初始化组件对象模型(COM)库,将当前的并发模式标识为STA(single-thread apartment——单线程单元),并启用一些特别用于OLE技术的额外功能。除了CoGetMalloc和内存分配函数,应用程序必须在调用COM库函数之前初始化COM库。

      我们在实例化前调用QleInitialize函数来初始化COM,如下所示。并在操作后调用OleUninitialize函数取消COM初始化。至此,该问题解决。

OleInitialize(0);
QAxObject *objIWbemLocator = new QAxObject("WbemScripting.SWbemLocator");
// 系列操作
OleUninitialize();

      近期在回顾用Qt开发的许多项目,对比较好或者我觉得会有人需要的内容,会同步更新在CSDN,希望能帮助到其他人。近几年受疫情影响,大家的生活和工作都十分不易,希望未来一年比一年好,我们一同努力!


      如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

相关文章
|
测试技术
QT --- VS2017+Qt5.12 编译报错【E2512 功能测试宏的参数必须是简单标识符 】的解决方法
QT --- VS2017+Qt5.12 编译报错【E2512 功能测试宏的参数必须是简单标识符 】的解决方法
559 0
|
IDE 开发工具 C++
VS2015+Qt5.9.8编译报错:error MSB6006: “cmd.exe”已退出,代码为 2
VS2015+Qt5.9.8编译报错:error MSB6006: “cmd.exe”已退出,代码为 2
2742 0
|
2月前
|
Windows
qt Error 20报错
这篇文章讨论了Qt开发中遇到的Error 20报错问题,并提供了将Windows服务中的NahimicService设置为手动运行或关闭的解决方案。
137 0
qt Error 20报错
|
6月前
|
Windows
Qtdesigner报错:This application failed to stat could not find or load the Qt platform plugin “windows“
Qtdesigner报错:This application failed to stat could not find or load the Qt platform plugin “windows“
|
7月前
|
C++
Qt定义属性类信息报错‘Qstring‘ was not declared in this scope; did you mean ‘xxx‘?并且还有有一堆报错,问题还出现在moc文件
Qt定义属性类信息报错‘Qstring‘ was not declared in this scope; did you mean ‘xxx‘?并且还有有一堆报错,问题还出现在moc文件
117 0
|
iOS开发 MacOS
Qt 报错:Undefined symbols for architecture arm64
MacBook Pro Apple M1 使用 Qt 6.4.1 的时候碰到的报错,做了不同的尝试,最后解决了这个报错。
703 0
解决QT QGraphicsView提升到QChartView报错的问题
使用QT提供的QChartView来绘制图表,提升QGraphicsView控件继承QChartView后,然后将QGraphicsView提升到我们自己写的类,怎么才能确保提升后编译不报错呢。
210 0
|
自然语言处理
Cocos2dx接入Qt后,Text使用TTF显示异常
Cocos2dx接入Qt后,Text使用TTF显示异常
145 0
运行QtDesigner.exe报错:it could not find or load the Qt platform plugin “windows“
运行QtDesigner.exe报错:it could not find or load the Qt platform plugin “windows“
运行QtDesigner.exe报错:it could not find or load the Qt platform plugin “windows“
|
编译器 C++
为已有C项目添加qt界面报错:XXX未声明的使用
为已有C项目添加qt界面报错:XXX未声明的使用
160 0

热门文章

最新文章