2020.3.13C++學習筆記——生成ActiveX控件(OCX)並用簡單html網頁加載調用接口實例

生成ActiveX控件(OCX)並用簡單html網頁加載調用接口實例

最近工作中需要一個簡單網頁來測試動態庫功能,所以需要一個加載了ActiveX控件的html網頁並且可以調用控件中的函數方法。實例中主要需要:1.一個可用VS2015自動生成基本框架的MFC ActiveX控件,2.一個簡單的html網頁,其中有少量js語言。
下面分步驟實現網頁調用OCX控件實例。

1.VS2015自動生成MFC ActiveX控件框架

在測試網頁中要調用的OCX控件可以直接由VS來生成基本框架,然後再對其添加屬性和方法。
參考:ActiveX控件解析和生成

首先在新建項目->模板->Visual C+±>MFC->MFC ActiveX 控件中選擇新建項目。
在這裏插入圖片描述
在設置頁面中根據自己需求選擇,我只需要一個簡單的OCX,所以直接點完成。
在這裏插入圖片描述
項目建立完成後VS會自動生成控件的基礎框架,包括其中的MFC控件類,事件映射等,具體看上面的MFC ActiveX 控件解析。
在這裏插入圖片描述
到這裏,一個簡單的可被調用的OCX控件已經生成了。

2.在OCX控件中加入方法和接口

在MFC AcitveX 控件項目中,自動生成的可用來測試是接口方法是AboutBox()函數,用於彈出對話框,函數位置在在MFCActiveXControl1Ctrl.cpp中。
在MFCActiveXControl1Ctrl.cpp中
但是我們使用OCX控件肯定要加入自己的函數方法。在學習中我瞭解到在控件項目中添加方法接口有兩種方式:一是自己手動添加,即在MFCActiveXControl1Ctrl.h , MFCActiveXControl1Ctrl.cpp , MFCActiveXControl1Ctrl.idl這三個文件中分別按規定格式添加函數方法,但是這個方法容易出錯且語法比較繁瑣,不建議。二是使用MFC自帶的添加方法/屬性功能來自動添加方法。流程如下:
1.在解決方案資源管理器中找到類視圖->MFCActiveXControl1->MFCActiveXControl1Lib->_DMFCActiveXCOntrol1Events,右擊添加->方法。
在這裏插入圖片描述
2.選擇添加方法後選擇方法的返回值類型和參數類型,點擊完成。
在這裏插入圖片描述
3.點擊完成後就可以在三個文件中找到剛剛加入的方法:
在MFCActiveXControl1Ctrl.h中:
在這裏插入圖片描述
添加的Test()方法在調度和事件ID下protected中。

在MFCActiveXControl1Ctrl.cpp中:
在這裏插入圖片描述
一般在文件最下方會出現一個新的空方法,可在TODO註釋後添加自己的功能代碼。

在MFCActiveXControl1.idl中:
在這裏插入圖片描述
在MFCActiveXControl1Events下多了一個名爲Test()的方法(methods)。

在MFCActiveXControl1Ctrl.cpp中Test()方法TODO註釋後加入自己的功能代碼後編譯結束即代表Test()方法的接口已經在OCX控件中可被調用。

3.生成OCX控件:

我理解OCX控件本質上還是一個幫助調用接口的動態庫,所以一般生成控件時格式爲OCX或DLL區別不大。(建議在編寫代碼時就把Debug和Release項目都編譯一下,我出現過Debug沒問題但Release有問題還沒能定位出問題,最後解決方法是相同的代碼重新建立項目直接選Release編譯成功了)

代碼完成後點擊生成->生成MFCActiveXControl1,一般都會報如下錯誤:
在這裏插入圖片描述
這時再次點擊生成->生成MFCActiveXControl1,如果結果如下:
在這裏插入圖片描述
則代表代碼沒問題,剛剛的錯誤是VS在編譯過程中註冊OCX控件的權限不足,需要我們用管理員身份手動註冊控件。

4.註冊OCX控件:

用管理員身份打開命令行(命令行程序在C:\WINDOWS\system32下的cmd.exe,右擊以管理員身份打開),
輸入指令: regsvr32 (你的工程路徑)D:\VS2015\vs2015-workspace\MFCActiveXControl1\Release\MFCActiveXControl1.ocx
回車後出現如下窗口說明OCX控件註冊成功:
在這裏插入圖片描述
要反註冊只需在相同指令的regsvr32後加上 /u 修飾符即可.
在這裏插入圖片描述

5.測試網頁環境:

我嘗試的是簡單的調用OCX控件的網頁,不涉及後端的數據庫等操作,所以沒配裝tomcat,直接用文本文檔改成html文件使用。
需要注意的是網頁中如果要調用OCX控件接口,首先需要知道OCX控件的id,不然網頁無法知道需要調用註冊表中的哪個控件。OCX的id可有兩種方法得知,第一種是當有控件工程文件時,直接在MFCActiveXControl1.idl文件中找到控件的uuid:
在這裏插入圖片描述
控件id就在CMFCActiveXControl1Ctrl的類信息下的uuid括號中。

第二種方法是用Win+R鍵並輸入 regedit 指令進入註冊表編輯器,在HKET_CLASSES_ROOT項中,根據控件名查找到控件的id號:
在這裏插入圖片描述
找到id號後在html文件中添加OCX控件對象代碼:

<object id="TestOcx_new" width="32" height="32"
				    classid="clsid:82D573E1-63BA-4734-9870-90361269AE01">

</object>

其中classid部分就是OCX控件的uuid,根據id可加載OCX控件。

除此之外,還需要設置IE瀏覽器的安全設置,在IE的設置->Internet選項->安全->自定義級別中,將ActiveX控件和插件項中所有項都改成允許或詢問,再重啓瀏覽器即可。
在這裏插入圖片描述
最後在測試html文件時,要以管理員身份打開IE瀏覽器,並選擇允許阻止的內容,在網頁上出現橢圓形標誌即代表網頁已加載OCX控件。
在這裏插入圖片描述
參考資料:VS2013生成ActiveX控件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章