C++Builder中開發Activex

來源:互聯網
上載者:User

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<TActiveFormXImpl,INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>

  注意不要丟了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函數,此處不再嚕囌,

還有一點就是,Activex的GUID和版本資訊在BCB開發時的ActFrmProj1.tlb視窗上看到。
  記得把這些檔案拷貝到伺服器上,不然會因為.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就可以直接運行了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.