Qt5中提供了調用ocx插件接口的方法,也提供了自己的插件開發方法QtActiveX的方式來開發插件。本博客僅說明在使用Qt5調用MFC的插件接口的方法。
- 在windows系統中,打開盤符“C:\Program Files (x86)\Windows Kits\8.1\bin\x86 或者 C:\Program Files (x86)\Windows Kits\8.1\bin\x64”找到程序 oleview.exe ,並以管理員模式打開該運行程序。如下圖:
-
打開上述軟件後,點擊工具欄文件夾邊上的三個小飛機,打開自己的ocx文件,可以看到該ocx 的UUID
-
打開Qt安裝目錄下的dumpcpp.exe,我的路徑是 (D:\Qt5.14.1\5.14.1\mingw73_32\bin\dumpcpp.exe)
在控制檯cmd中執行 dumpcpp.exe {UUID} 該UUID就是ocx插件的UUID,
例如:dumpcpp.exe {98BD8966-12E5-4291-A8B5-E850F8E53934},執行完畢後就可在dumpcpp.exe所在的目錄(D:\Qt5.14.1\5.14.1\mingw73_32\bin\)生成Qt版本的ocx插件的頭文件和cpp文件。
-
將生成的.h、.cpp文件添加到項目中,如果報出頭文件未找到等情況,在項目文件.pro文件中添加 QT+= axcontainer 即可。
-
調用OCX的接口的方式如下:
方式一:將生成的頭文件包含在項目中。然後調用生成的類名,聲明ocx對象即可。
QtOcxTestLib::QtOcxTest m_actiC; QString str1=m_actiC.BncInitVoip(); |
方式二:使用生成的UUID,並通過一個組件QAxWidget加載該ocx。
QAxWidget *m_axWidget = new QAxWidget(parent); m_axWidget->resize(500,80); m_axWidget->setControl(QString::fromUtf8("{C34B626E-1530-41BB-A847-28A1F9F9AE37}")); QString str1=m_axWidget->dynamicCall("BncInitVoip()").toString(); |
注:採用方式二加載OCX時,調用接口使用函數dynamicCall,返回值是一個QVariant。調用方式如下:
註冊ocx的控件->dynamicCall(“接口名稱(參數1類型,參數2類型....)”,參數1,參數2......)
例如:Bool ret = m_axWidget->dynamicCall("Init(LPCTSTR, LPCTSTR)", strFirst, strSecond).toBool();
- OCX參數類型、返回值類型對應Qt類型