Windows中註冊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光盤的/sample/VC98/MFC/controls/regsvr中。
二、 使用安裝程序製作軟件: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控件文件的絕對路徑吧,使用時可以根據自己要註冊的控件自行改動,我要註冊的是Shockwaveflash控件,所以我用的絕對路徑是C://Windows//System32//Macromed//Flash//Flash9f.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不能運行。

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