ActiveX 控件是一個(gè)動(dòng)態(tài)鏈接庫,是作為基于COM 服務(wù)器進(jìn)行操作的,并且可以嵌入在包容器宿主應用程序中,ActiveX 控件的前身就是OLE 控件。由于A(yíng)ctiveX 控件與開(kāi)發(fā)平臺無(wú)關(guān),因此,在一種編程語(yǔ)言上開(kāi)發(fā)的ActiveX 控件可以無(wú)須作任何修改,即可在另一種編程語(yǔ)言中使用,其效果如同使用Windows 通用控件一樣。如:在VC ++中開(kāi)發(fā)的ActiveX 控件,不作任何修改即可應用于VB 中。由此可見(jiàn),通過(guò)使用ActiveX 控件即可實(shí)現快速小型的組件重用、代碼共享,從而提高編程效率。
從Internet 下載的ActiveX 控件,或從其他途徑得到的ActiveX 控件,用戶(hù)應該怎樣做才能正確使用呢?一般來(lái)說(shuō),一個(gè)外來(lái)ActiveX 控件要在Windows 中被正確使用,首先必須將控件文件( *.OCX) 復制到硬盤(pán)中,然后將其在Windows 中注冊,未在Windows 中注冊過(guò)的ActiveX 控件是不能使用的。注冊ActiveX 控件一般來(lái)說(shuō)有三種途徑,適用范圍不同,各有各的優(yōu)點(diǎn),下面分別討論。
一、使用Regsvr32.exe 程序對ActiveX 控件進(jìn)行注冊
對于未注冊過(guò)的ActiveX 控件可使用此軟件對其進(jìn)行注冊,外來(lái)ActiveX 控件要應用到自己的程序中也必須進(jìn)行注冊。該文件位于Windows 目錄的system 子目錄下。使用方法如下:點(diǎn)擊“開(kāi)始”→“運行”;在運行對話(huà)框中輸入以下命令:
regsvr32 < 文件名> 注冊一個(gè)ActiveX 控件
regsvr32 /u< 文件名> 解除某ActiveX 控件的注冊
我們使用一些帶ActiveX 控件的應用程序時(shí),有時(shí)會(huì )出現不能運行的情況,這有可能是其自帶ActiveX 控件未注冊所至,這時(shí)不妨使用上述命令一試。另外,VC ++使用者若對regsvr32.exe 的編碼感興趣的話(huà),可在VC ++的聯(lián)機幫助中找到其源代碼。若使用VC ++6.0,則在MSDN 光盤(pán)的\sample\VC98\MFC\controls\regsvr 中。
二、使用安裝程序
制作軟件:InstallShield
使用regsvr32.exe 來(lái)注冊ActiveX 控件雖然簡(jiǎn)單,但需要用戶(hù)手工注冊,在不用時(shí)還得手工解除注冊,因此,這對一個(gè)應用程序來(lái)說(shuō)并非好的解決方案。大型應用軟件一般都有一個(gè)安裝程序,在安裝程序中解決ActiveX 控件注冊是較為理想的一種方案。使用InstallShield 可以制作出專(zhuān)業(yè)級的Setup,還可注冊其中的ActiveX 控件;而且,在以后攜載軟件時(shí),自動(dòng)注銷(xiāo)掉以前注冊的ActiveX 控件。方法如下:
啟動(dòng)InstallShield,使用Project Wizard 建立一個(gè)新的項目;
新建一個(gè)“File Group",將需要注冊的ActiveX 控件文件放入此“File Group"中;
將上述“File Group"的“Self -Registered"屬性設置成“Yes"。
上述步驟僅為制作Setup 中設置自動(dòng)注冊ActiveX 控件幾步,至于使用InstallShield 怎樣制作一個(gè)完整的Setup 不在本文討論范圍之中, 請讀者自己參看有關(guān)書(shū)籍。
三、在應用程序中加入注冊代碼
對于小型程序不宜采取第二種方法,較好的方法是在程序中嵌入注冊代碼,實(shí)現應用程序自注冊。其編程方法是:
1、使用Windows API 函數LoadLibrary 載入ActiveX 控件;
2、使用GetProcAddress 函數獲取ActiveX 控件中注冊函數DllRegisterServer (注銷(xiāo)函數為DllUnregisterServer)指針;
3、調用注冊函數DllRegisterServer(或注銷(xiāo)函數DllUnregisterServer)。
下面以VC ++6.0 編寫(xiě)的RegActivex 程序為例,介紹怎樣在程序中自動(dòng)注冊(注銷(xiāo))ActiveX 控件。RegActivex 的主體框架由VC ++6.0 的AppWizard 自動(dòng)產(chǎn)生,在其基礎上增加兩個(gè)菜單項:“注冊ActiveX 控件”、“注銷(xiāo)ActiveX 控件”。當選擇“注冊ActiveX 控件”菜單時(shí),將對控件toweratl.ocx(一個(gè)漢諾游戲)進(jìn)行注冊;當選擇“注銷(xiāo)ActiveX 控件”菜單時(shí),將解除控件toweratl.ocx 的注冊。
1、使用VC ++6.0 建立一個(gè)單文檔的應用程序RegActivex,其他項目接受默認設置;
2、給應用程序增加兩個(gè)菜單項:“注冊ActiveX 控件”、“注銷(xiāo)ActiveX 控件”,步驟如下:
a、單擊VC ++6.0 左邊窗口的“ResoureView",雙擊MENU 項目下的IDR_MAINFRAME 以打開(kāi)菜單編輯器;
b、在菜單編輯器中,加入一個(gè)主菜單“注冊”,在“注冊”主菜單下加入兩個(gè)菜單項:“注冊ActiveX 控件”、“注銷(xiāo)ActiveX 控件”;
3、給新建的菜單項“注冊ActiveX 控件”和“注銷(xiāo)ActiveX 控件”增加響應函數:
b、在資源編輯器中,雙擊MENU 中的IDR_MAINFRAME 打開(kāi)菜單編輯器,單擊“注冊ActiveX 控件”, 按Ctrl +W 打開(kāi)MFC Class Wizard;
c、雙擊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);
}
c、"注銷(xiāo)ActiveX 控件”菜單項響應函數的編寫(xiě)方法同上,代碼也相似,只是將“l(fā)pDllEntryPoint=GetProcAddress(hLib,_T("DllRegisterServer"));"改成:
lpDllEntryPoint = GetProcAddress(hLib,_T
("DllUnregisterServer"))。
4、編譯聯(lián)接上述程序,即可得一個(gè)可執行文件。另需注意的是:應將ActiveX 控件文件toweratl.ocx 復制到Windows 的system 目錄下??丶募oweratl.ocx 在微軟出版的《Visual C ++6.0 程序員指南》所附光盤(pán)中可以找到。
5、測試上述程序:運行《Visual C ++6.0 程序員指南》所附光盤(pán)中的game2 程序,若使用RegActivex 注冊了toweratl.ocx 控件,則該程序可以正常運行;若使用RegActivex 注銷(xiāo)了toweratl.ocx 控件則game2 不能運行。
聯(lián)系客服