程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> ActiveX控件注冊的幾種方法

ActiveX控件注冊的幾種方法

編輯:關於C++

本文中的程序原為VC++所編寫,略改動一些,將程序用C++Builder編寫。

ActiveX控件是一個動態鏈接庫,是作為基於COM服務器進行操作的,並且可以嵌入在包容器宿主應用程序中,ActiveX控件的前身就是OLE控件。由於ActiveX控件與開發平台無關,因此,在一種編程語言上開發的ActiveX控件可以無須作任何修改,即可在另一種編程語言中使用,其效果如同使用Windows通用控件一樣。如:在VC++中開發的ActiveX控件,不作任何修改即可應用於VB中。由此可見,通過使用ActiveX控件即可實現快速小型的組件重用、代碼共享,從而提高編程效率。

----從Internet下載的ActiveX控件,或從其他途徑得到的ActiveX控件,用戶應該怎樣做才能正確使用呢?一般來說,一個外來ActiveX控件要在Windows中被正確使用,首先必須將控件文件(*.OCX)復制到硬盤中,然後將其在Windows中注冊,未在Windows中注冊過的ActiveX控件是不能使用的。注冊ActiveX控件一般來說有三種途徑,適用范圍不同,各有各的優點,下面分別討論。

一、使用Regsvr32.exe程序對ActiveX控件進行注冊

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

regsvr32 <文件名>   注冊一個ActiveX控件

regsvr32 /u <文件名>  解除某ActiveX控件的注冊

----我們使用一些帶ActiveX控件的應用程序時,有時會出現不能運行的情況,這有可能是其自帶ActiveX控件未注冊所至,這時不妨使用上述命令一試。

二、使用安裝程序

制作軟件:InstallShield

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

啟動InstallShield,使用ProjectWizard建立一個新的項目;

新建一個“FileGroup”,將需要注冊的ActiveX控件文件放入此“FileGroup”中;

將上述“FileGroup”的“Self-Registered”屬性設置成“Yes”。

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

三、在應用程序中加入注冊代碼

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

使用WindowsAPI函數LoadLibrary載入ActiveX控件;

使用GetProcAddress函數獲取ActiveX控件中注冊函數DllRegisterServer(注銷函數為DllUnregisterServer)指針;

調用注冊函數DllRegisterServer(或注銷函數DllUnregisterServer)。

----下面以C++ Builder 6.0編寫的RegActivex程序為例,介紹怎樣在程序中自動注冊(注銷)ActiveX控件。

在Form中添加兩個Button,屬性設置如:

Button1->Caption="注冊ActiveX控件";

Button2->Caption="注銷ActiveX控件";

當Button1時,將對指定控件進行注冊;當點擊Button2時,將解除指定控件的注冊。

雙擊Button1,添加代碼如下:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
HINSTANCE hLib=LoadLibrary("F:\\c.ocx");//指定要注冊的ocx文件的路徑及文件名。
if (hLib==NULL)
{
MessageBox(Handle,"不能載入Dll文件!","失敗ing..",MB_OK);
return;
}
//獲取注冊函數DllRegisterServer地址
FARPROC lpDllEntryPoint;
lpDllEntryPoint = GetProcAddress(hLib,"DllRegisterServer");
//調用注冊函數DllRegisterServer
if(lpDllEntryPoint!=NULL)
{
if(FAILED((*lpDllEntryPoint)()))
{
MessageBox(Handle,"調用DllRegisterServer失敗!","失敗ing..",MB_OK);
FreeLibrary(hLib);
return;
};
MessageBox(Handle,"注冊成功!","Reg",MB_OK);
}
else
MessageBox(Handle,"調用DllRegisterServer失敗!","失敗ing..",MB_OK);
}
雙擊Button2,添加代碼如下:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
HINSTANCE hLib=LoadLibrary("F:\\c.ocx");
if (hLib==NULL)
{
MessageBox(Handle,"不能載入Dll文件!","失敗ing..",MB_OK);
return;
}
//獲取注冊函數DllRegisterServer地址
FARPROC lpDllEntryPoint;
lpDllEntryPoint = GetProcAddress(hLib,"DllUnregisterServer");//注意這裡是DllUnregisterServer,老妖著。
//調用注冊函數DllRegisterServer
if(lpDllEntryPoint!=NULL)
{
if(((*lpDllEntryPoint)()))
{
MessageBox(Handle,"調用DllUnRegisterServer失敗!","失敗ing..",MB_OK);
FreeLibrary(hLib);
return;
};
MessageBox(Handle,"注銷成功!","Unreg",MB_OK);
}
else
MessageBox(Handle,"調用DllUnRegisterServer失敗!!!","結果",MB_OK);
}

編譯聯接上述程序,即可得一個可執行文件。另需注意的是:應將ActiveX控件文件復制到Windows的system目錄下。

讀者可自行找一個ocx文件來注冊測試一下的說。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved