接前面的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文件,里面会有详细的对每个接口的使用说明,是很好用的一个参考文件了。
原文:https://www.cnblogs.com/warmSnowFY/p/10688305.html