C++Builder中開發Activex 分享

1.創建自己的ActiveX控件
C++Buider開發ActiveX的功能非常強,但是這方面的資料卻比較少,本人經過摸索終於搞定了創建Web方式Activex的基本方法
⑴打開BCB6,新建一個Activex工程,選擇時注意選擇ActiveX標籤頁的Active Form
⑵在彈出的對話框中設置ActiveX Name爲 ActFrm,後面的實現單元和工程名都會自動更改
⑶勾選Make Control Licensed和Include Version Information,確定之後會出現一個和標準Form類似的
⑷在C++Builder自動創建的窗體上面添加一個按鈕,隨便實現一些功能,如ShowMessage("點擊了按鈕");

⑸設置Package相關參數。你肯定希望自己創建的ocx文件不依賴本機的開發環境,因此必須對編譯器作適當的設置
ⅠProject->Option->Packages去掉Build With Runtime Packages 前面的勾
ⅡProject->Option->Linker 去掉動態RTL前面的勾,這樣你產生的ocx文件就不會依賴BCB的開發環境了
好了做完上面的步驟,一個簡單的Activex就創建完成了,可以選擇Run菜單下的Register ActiveX Server進行註冊,你就可以看到你的開發成果了,如果需要發佈到互聯網上,通過瀏覽器進行註冊的話,那就需要做下面的設置
⑹設置Web Deployment Options
點擊Web Deployment Options菜單,出現Web Deployment 選項設置窗口,有三個屬性頁
Ⅰ Project主要用於設置Activex文件的位置信息
①Target dir(Full path of the deployed OCX) 設置OCX目錄,也就是在選擇Project->WebDeploy之後ocx文件將要拷貝到的目錄,我們可以在當前工程下建立一個 punlished目錄作爲發佈目錄
e.g:當前工程目錄爲f:/projscts/firstocx 發佈目錄爲f:/projscts/firstocx/published(也就是Target dir)
②Target URL( Virtual path of the deployed OCX)
如果客戶端沒有安裝我們製作的activex控件,瀏覽器會自動到指定的網址進行尋找
e.g:本機IP192.168.0.228 端口 8080 虛擬目錄 myapp(使用的Web服務器是Tomcat,myapp也就是D:/Tomcat/webapps下的目錄)
此處輸入http://192.168.0.228:8080/myapp/
③HTML dir(Full path of the deployed HTML file)
和Activex文件配套的html文件的存放位置,這裏可以把它設置成f:/projscts/firstocx/published,主要是爲了方便管理
在General Options下勾選一下四項
a.Use CAB file compression              b.Deploy required packages
c.Include file version number           d.Deploy additional files
ⅡPackages 這個頁面用於發佈控件中用到的額外的包,因爲我們在第(5)步中已經去掉了額外的包,所以這一頁爲空
ⅢAdditonal Files,這一頁用於發佈其它文件,至於ocx文件有沒有用到其它的文件我們可以使用vc++帶的工具 Dependency Walker來進行查看,根據 Dependency Walker的顯示結果我們知道ocx使用到的dll文件在windows的目錄下已經存在,沒有必要隨我們的ocx文件一起發佈
但是由於我們製作控件的時候選擇了Make Control Licensed,所以隨包一起發佈的應該還有一個lic文件,這個文件在工程目錄下,我們在Additonal Files頁中點擊Add將lic文件包含進來就可以了
這個lic文件讓我做控件走了不少彎路,開發出來的控件在本地可以運行良好(也就是在c++builder的run菜單裏面使用register Activex server註冊 ),但是一旦移到其它位置總是不能成功,而且最開始的時候也不知道使用vc++帶的ActiveX Control Test Container工具來測試已經生成的ocx控件
恩,點擊WebDeploy菜單就大功告成了麼?沒有。如果我們將published目錄下的內容全部拷貝到tomcat的myapp目錄下,然後將IE的安全等級調到最低,我們仍然無法瀏覽剛纔生成的ActiveX控件,瀏覽器窗口上面始終顯示一把紅叉。真讓人泄氣
不過不要放棄,我們繼續進行第2步
2.實現IObjectSafety
在IE6以及更高版本的瀏覽器中我們還必須實現IObjectSafety接口才能保證自己開發的ocx控件不會被IE禁用
怎麼實現呢?其實很簡單,加上幾句話就可以了
①打開ActFrm的頭文件,我們最開始的時候已經在這個Form上面加了一個按鈕,打開它的頭文件後可以看到一個類class TAcFrm 不要管它,跟它沒有什麼關係,接着往下看,可以看到類似
class ATL_NO_VTABLE TActFrmImpl:
VCLCONTROL_IMPL(TActFrmImpl, ActFrm ..........)之類的代碼,我們在括號之後再給他加個接口
加完之後類似這樣
class ATL_NO_VTABLE TActFrmImpl:
VCLCONTROL_IMPL(TActFrmImpl, ActFrm ..........),public IObjectSafetyImpl<TActFrmImpl,INTERFACESAFE_FOR_UNTRUSTED_CALLER>
注意不要丟了public前面的逗號,多重繼承必須的
②然後再 void InitializeControl(){}函數結束之後加入
BEGIN_CATEGORY_MAP(TActFrmImpl)
IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
END_CATEGORY_MAP()

③BEGIN_COM_MAP(TActFrmImpl)
VCL_CONTROL_COM_INTERFACE_ENTRIES(IActiveFrmX)
COM_INTERFACE_ENTRY(IObjectSafety)//加入這樣一行就ok了
END_COM_MAP()
編譯通過,應該沒有問題
3.添加自定義的方法(接口)
我們做的ActiveX控件應該要能夠與javascript之類的腳本進行交互,所以我們在控件中要實現自己的接口
選擇菜單view->type library出現tlb文件的瀏覽窗口,這裏面有一大堆的東西,都不要管它,我們直奔主題,找到IActFrm點擊右鍵新建一個方法,就叫做ShowValue吧
在改方法的parameters頁中給這個方法添加一個參數,參數名使用longvalue,參數類型使用variant,點擊刷新按鈕 C++builder將自動給我們添加一個叫做ShowValue的方法,參數類型都設置好了,我們在這個函數裏面添加 ShowMessage(longvalue.iVal);
然後在ocx對應的htm文件中添加相應的js代碼
默認生成的htm文件加載activex控件時是沒有添加ID的,我們需要手動給它添加,假設id="myocx",然後添加一個js函數
<script language="javascript">
function testfun(){
myocx.ShowValue(12345);
}
</script>
然後在這個頁面中添加一個按鈕,在這個按鈕的onclick事件中觸發testfun函數,此處不再嚕囌
記得把這些文件拷貝到服務器上,不然會因爲.inf文件找不到而導致activex不能正常顯示
4.使用ActiveX Control Test Container進行測試
ActiveX Control Test Container是個好東西,沒有它,我還真不知道我編寫的activex控件那裏有問題吶
這個工具隨vc++一起安裝,使用起來非常簡單,打開之後選擇edit->insert new control從控件列表中選擇一個activex控件就可以了,這裏當然是選擇ActFrm羅
5.實現數字簽名
要是瀏覽器允許你任意下載activex控件的話,故事到這裏也就結束了。可事實是,爲了保證安全,瀏覽器是不會下載沒有簽名的控件的,如果控件沒有簽名,瀏覽器壓根就不會給出任何提示,瀏覽器上面只有一把紅叉
ie有點殘忍哈
沒關係,自己Diy一個簽名就可以讓瀏覽器給出下載提示框了。
製作簽名需要下面這些工具 makecert signcode cert2spc還有如果你需要自己打包ocx的話需要iexpress工具,這個工具在windows安裝目錄裏面有
前面三個工具可以從微軟的官方站點獲取
手工編寫一個bat文件(主要是不習慣一遍又一遍地敲命令),將這個bat文件放到f:/projscts/firstocx/published目錄下
makecert /sv "ActFrmProj1.PVK" /n "CN=公司名稱,E=email,O=作者" ActFrmProj1.cer
cert2spc ActFrmProj1.cer ActFrmProj1.spc
signcode
當然要用到這三條命令的話你必須將這三個文件的路徑加入到windows環境變量path中去
第一條命令產生ActFrmProj1.cer 和 ActFrmProj1.PVK 兩個文件
第二步將ActFrmProj1.cer 轉爲ActiveProj1.spc文件
這個過程中會要求你輸入密碼,自己隨便輸一個,記不記得都沒關係
第三步就是給我們生成的cab文件前面,圖形界面操作很容易
①選擇BCB自動生成的cab文件,應該在f:/projscts/firstocx/published目錄下
②簽名類型選擇自定義
③從文件選擇一個證書,這裏沒有其它選擇只有一個文件就是f:/projscts/firstocx/published下的spc文件
④私鑰位置選擇CSP中的私鑰
⑤密鑰容器選擇ActFrmPrj1.pvk,這個文件就是第一步生成的那個pvk
⑥算法選擇md5或者sha都可以,然後在其它證書中瀏覽,選擇我們生成的ActFrmProj1.cer搞定了

然後將puulished目錄下的文件全部拷貝到myapp目錄下,通過瀏覽器進行訪問, 瀏覽器會彈出提示問是否要安裝Activex控件,當然選是吶,不然豈不是白忙活了?

6.調試Activex的技巧
當我們使用BCB開發控件的時候會發現F9不能運行,原因就是ocx工作方式和dll文件類似,我們可以通過 設置運行參數來解決這個問題,Run->Paramters在host appliaction 中選擇ie,e.g:C:/Program Files/Internet Explorer/IEXPLORE.EXE
parameters輸入如下:f:/projscts/firstocx/published/ActiveFrmProj.htm
再按F9就可以直接運行了

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