接前面的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文件,里面會有詳細的對每個接口的使用說明,是很好用的一個參考文件了。