Qt 关于COM组件的使用的记录 (二)

接前面的COM组件使用记录。

这里要说明一下QAxObject和QAxBase的区别。

帮助文档中对QAxObject的说明:The QAxObject class provides a QObject that wraps a COM object.

       对QAxWidget的说明:The QAxWidget class is a QWidget that wraps an ActiveX control.

一个是封装COM组件,一个是包装ActiveX。

 

上一文中使用QAxObject类对象来做COM组件的使用,发现在实际使用中,有一些接口通过dynamicCall是调用不了的,会提示

QAxBase: Error calling IDispatch member checkDevice: Exception thrown by server

这样的错误。

后来查看了通过dumpcpp工具导出的.h文件,里面的类是这样

class CRITERIONLIB_EXPORT stdfcectl : public QAxWidget

因此尝试修改成QAxWidget的对象指针来进行调用,就可以调用所有的接口了。

目前使用的Qt5.5版本中,帮助文档是写的QAxObject的使用用法;后来查阅了《C++ GUI Qt4 编程 (第二版)》第23章第二节内容。里面的组件是继承的QWidget,也是用的QAxWidget来加载。

所以这里猜想,所实例化的对象,应该要根据组件的类型来选择。如果包含窗口对象,使用QAxWidget,反之QAxObject。

另外,上文中生成的html文件,里面会有详细的对每个接口的使用说明,是很好用的一个参考文件了。

 

posted @ 2019-04-11 10:55  蓦然而然  阅读(1651)  评论(1编辑  收藏  举报