Windows中ActiveX控制項註冊的方法——編程實現

來源:互聯網
上載者:User
自從Microsoft公司於1996年推出ActiveX技術以來,ActiveX技術已得到了許多軟體公司的支援和響應,並紛紛在其產品中融入ActiveX技術。而作為ActiveX技術之一的ActiveX控制項也得到了迅猛的發展,不但各大軟體公司推出了不少ActiveX 控制項,ActiveX控制項更是得到一般開發人員的喜愛。那麼,什麼是ActiveX控制項呢?ActiveX控制項是一個動態連結程式庫,是作為基於COM伺服器進行操作的,並且可以嵌入在包容器宿主應用程式中,ActiveX控制項的前身就是OLE控制項。由於ActiveX控制項與開發平台無關,因此,在一種程式設計語言上開發的ActiveX控制項可以無須任何修改,即可在另一種程式設計語言中使用,其效果如同使用Windows通用控制項一樣。如:在VC++中開發的ActiveX控制項,不作任何修改即可應用於VB中。由此可見,通過使用ActiveX控制項即可實現快速小型的組件重用、實現代碼共用,從而提高編程效率。從上面亦可看出為何ActiveX控制項如此廣泛地受到開發人員的歡迎。 

   因為ActiveX控制項的可重用性,加上Internet的普及,ActiveX控制項得到了極大的發展,目前,從Internet上可以得到相當多的ActiveX控制項,而且品種繁多,所完成的任務幾乎無所不包。對普通開發人員來說,只要有耐心,都能從Internet上找到符合自己要求的ActiveX控制項。 

   從Internet下載的ActiveX控制項,或從其他途徑得到的ActiveX控制項,使用者應該怎樣做才能正確使用ActiveX控制項或將其應用於自己的程式中呢?一般來說,一個外來ActiveX控制項要在Windows中被正確使用,首先必須將控制項檔案(*.OCX)複製到硬碟中,然後將其在Windows中註冊,未在Windows中註冊過的ActiveX控制項是不能使用的。註冊ActiveX控制項一般來說有三種途徑: 

   1. 使用Regsvr32.exe程式對ActiveX控制項進行註冊; 

   2. 使用安裝程式製作軟體:InstallShield; 

   3. 在應用程式中加入註冊代碼。 

   上述方法適用範圍不同,各有各的優點,下面分別討論。 

   一、 使用Regsvr32.exe程式對ActiveX控制項進行註冊 

   對於未註冊過的ActiveX控制項可使用此軟體對其進行註冊,外來ActiveX控制項要應用到自己的程式中也必須進行註冊。該檔案位於Windows目錄的system子目錄下。使用方法如下:點擊“開始”→“運行”;在運行對話方塊中輸入以下命令: 

regsvr32  < 檔案名稱 >        註冊一個ActiveX控制項
regsvr32  /u  < 檔案名稱 >    解除某ActiveX控制項的註冊
   我們使用一些帶ActiveX控制項的應用程式時,有時會出現不能啟動並執行情況,這有可能是其內建ActiveX控制項未註冊所至,這時不妨使用上述命令一試。另外,VC++使用者若對regsvr32.exe的編碼感興趣的話,可在VC++的線上說明中找到其原始碼。若使用VC++ 6.0,則在MSDN光碟片的sampleVC98MFCcontrols egsvr中。 
   二、 使用安裝程式製作軟體:InstallShield 

   使用regsvr32.exe來註冊ActiveX控制項雖然簡單,但需要使用者手工註冊,在不用時還得手工解除註冊,因此,這對一個應用程式來說並非好的解決方案。大型應用軟體一般都有一個安裝程式,在安裝程式中解決ActiveX控制項註冊是較為理想的一種方案。使用InstallShield可以製作出專業級的Setup,還可註冊其中的ActiveX控制項;而且,在以後攜載軟體時,自動登出掉以前註冊的ActiveX控制項。方法如下: 

   1. 啟動InstallShield,使用Project Wizard建立一個新的項目; 

   2. 建立一個“File Group”,將需要註冊的ActiveX控制項檔案放入此“File Group”中; 

   3. 將上述“File Group”的“Self-Registered”屬性設定成“Yes”。 

   上述步驟僅為製作Setup中設定自動註冊ActiveX控制項幾步,至於使用InstallShield怎樣製作一個完整的Setup不在本文討論範圍之中,請讀者自己參看有關書籍。 

   三、 在應用程式中加入註冊代碼 

   對於小型程式不宜採取第二種方法,較好的方法是在程式中嵌入註冊代碼,實現應用程式自註冊。其編程方法是: 

   1. 使用Windows API函數LoadLibrary載入ActiveX控制項; 

   2. 使用GetProcAddress函數擷取ActiveX控制項中註冊函數DllRegisterServer(登出函數為DllUnregisterServer)指標; 

   3. 調用註冊函數DllRegisterServer(或登出函數DllUnregisterServer)。 

   下面以VC++ 6.0編寫的RegActivex程式為例,介紹怎樣在程式中自動註冊(登出)ActiveX控制項。RegActivex的主體架構由VC++ 6.0的AppWizard自動產生,在其基礎上增加兩個功能表項目:“註冊ActiveX控制項”、“登出ActiveX控制項”。當選擇“註冊ActiveX控制項”菜單時,將對控制項toweratl.ocx(一個漢諾遊戲)進行註冊;當選擇“登出ActiveX控制項”菜單時,將解除控制項toweratl.ocx的註冊。 

   1. 使用VC++ 6.0建立一個單文檔的應用程式RegActivex,其他項目接受預設設定; 

   2. 給應用程式增加兩個功能表項目:“註冊ActiveX控制項”、“登出ActiveX控制項”,步驟如下: 

   ① 單擊VC++ 6.0左邊視窗的“ResoureView”,雙擊MENU項目下的IDR_MAINFRAME以開啟菜單編輯器; 

   ② 在菜單編輯器中,加入一個主菜單“註冊”,在“註冊”主菜單下加入兩個功能表項目:“註冊ActiveX控制項”、“登出ActiveX控制項”; 

   3. 給建立的功能表項目 “註冊ActiveX控制項” 和“登出ActiveX控制項”增加響應函數: 

   ① 在資源編輯其中,雙擊MENU中的IDR_MAINFRAME開啟菜單編輯器,單擊“註冊ActiveX控制項”,按Ctrl+W開啟MFC Class Wizard; 

   ② 雙擊Messages框中的COMMAND,給“註冊ActiveX控制項”功能表項目增加響應函數OnRegisterReg(),單擊右邊“Edit”按鈕給OnRegisterReg()函數增加如下代碼: 

void CMainFrame::OnRegisterReg()
  {
  //ActiveX控制項的路徑及檔案名稱
  LPCTSTR pszDllName="toweratl.ocx";
        //裝載ActiveX控制項
  HINSTANCE hLib = LoadLibrary(pszDllName);
        if (hLib < (HINSTANCE)HINSTANCE_ERROR)
        {
                MessageBox("不能載入Dll檔案!","結果",MB_OK);
                return;
        }
  //擷取註冊函數DllRegisterServer地址
        FARPROC lpDllEntryPoint; 
        lpDllEntryPoint = GetProcAddress
(hLib,_T("DllRegisterServer"));
        //調用註冊函數DllRegisterServer
if(lpDllEntryPoint!=NULL)
        {
                if(FAILED((*lpDllEntryPoint)()))
                {
MessageBox("調用DllRegisterServer 
失敗!","結果",MB_OK);
FreeLibrary(hLib);
return;
                };
MessageBox("註冊成功","結果",MB_OK);
        }
        else
MessageBox("調用DllRegisterServer失敗!"
,"結果",MB_OK);
}
   ③ “登出ActiveX控制項”功能表項目響應函數的編寫方法同上,代碼也相似,只是將 
“lpDllEntryPoint=GetProcAddress
(hLib,_T("DllRegisterServer"));”改成:
        lpDllEntryPoint = GetProcAddress
(hLib,_T("DllUnregisterServer"))。
   4. 編譯聯結上述程式,即可得一個可執行檔。另需注意的是:應將ActiveX控制項檔案toweratl.ocx複製到Windows的system目錄下。控制項檔案toweratl.ocx在微軟出版的《Visual C++ 6.0程式員指南》所附光碟片中可以找到。 
   5. 測試上述程式:運行《Visual C++ 6.0程式員指南》所附光碟片中的game2程式,若使用RegActivex註冊了toweratl.ocx控制項,則該程式可以正常運行;若使用RegActivex登出了toweratl.ocx控制項則game2不能運行。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.