日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

VC++ OCX 控件注册

發布時間:2023/12/3 综合教程 50 生活家
生活随笔 收集整理的這篇文章主要介紹了 VC++ OCX 控件注册 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://www.cctry.com/thread-5334-1-1.html

?

方法一:在dos或Windows命令行下運行:regsvr32 ocxname.ocx 注冊

示例:
regsvr32 netshare.ocx? ???//注冊netshare.ocx控件
regsvr32 /u netshare.ocx? ? //解除netshare.ocx控件的注冊

如果netshare.ocx文件不在system目錄時,還必須在文件名前加上完整的路徑。除了regsvr32應用程序之外,Microsoft在它的 web 站點上還提供了一個稱為regclean.exe 的程序,可以檢查注冊表并去掉丟失的組件在注冊表中的條目。regclean.exe 除了可以刪除 “懸掛” 的條目,它還提供一個“undo” 文件幫助恢復錯誤的刪除。

用 regsvr32.exe 注冊 activeX 控件雖然簡單,但需要用戶手工進行注冊,在不用時還需手工解除注冊。

方法二:用 install shield,在里面選 “self-registered”,安裝程序將自動注冊;

方法三:api 函數注冊

此方法的設計思路是:先將 activeX 控件載入內存,然后驗證其有效性,最后直接在內存地址中執行其注冊函數(DllRegisterServer、 DllUnregisterServer)。
其編程方法是:

1、使用Windows api 函數Loadlibrary 載入activeX 控件;
2、使用GetProcAddress 函數獲取activeX 控件中注冊函數DllRegisterServer(注銷函數為 DllUnregisterServer)指針;
3、使用CallwindowProc 函數執行已載入內存的activeX 控件注冊函數(DllRegisterServer、 DllUnregisterServer)。

示例:

typedef int (callback* myfunction)(void);
myfunction??myfunction = null;
hinstance handle = null ;
handle = LoadLibrary("trdragdroptreectrl.ocx");

if( handle != null )
{
? ?? ?myfunction = GetProcAddress(handle, "DllRegisterServer");
? ?? ?if( myfunction != null )
? ?? ?{
? ?? ?? ?? ?myfunction();
? ?? ?}
}

小小經驗:
1、有時候在程序中使用ocx控件時失效,檢查一下調用之間是否執行了afxoleinit()。如果使用了容器,還需要保證執行了 afxEnableControlContainer()
2、使用Activex Control Test Container 可以很方便地測試制作出來的ocx控件(從開始菜單-》程序-》Microsoft Visual Studio 6.0 -> Microsoft Visual Studio 6.0 Tools 可以看到該工具)
3、有時候控件制作的沒有問題,注冊方式也對,但是注冊的時候確失敗了,可能時dll的版本不對,使用Dependencies查看ocx控件依賴dll是否跟現在使用的dll版本一致。

轉自:http://www.cctry.com/thread-2418-1-1.html

?

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 控件未注冊所至,這時不妨使用上述命令一試。另外,VC ++使用者若對regsvr32.exe 的編碼感興趣的話,可在VC ++的聯機幫助中找到其源代碼。若使用VC ++6.0,則在MSDN 光盤的/sample/VC98/MFC/controls/regsvr 中。

  二、使用安裝程序

制作軟件:InstallShield

  使用regsvr32.exe 來注冊ActiveX 控件雖然簡單,但需要用戶手工注冊,在不用時還得手工解除注冊,因此,這對一個應用程序來說并非好的解決方案。大型應用軟件一般都有一個安裝程序,在安裝程序中解決ActiveX 控件注冊是較為理想的一種方案。使用InstallShield 可以制作出專業級的Setup,還可注冊其中的ActiveX 控件;而且,在以后攜載軟件時,自動注銷掉以前注冊的ActiveX 控件。方法如下:
啟動InstallShield,使用Project Wizard 建立一個新的項目;
新建一個“File Group",將需要注冊的ActiveX 控件文件放入此“File Group"中;
將上述“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 控件”,步驟如下:
  a、單擊VC ++6.0 左邊窗口的“ResoureView",雙擊MENU 項目下的IDR_MAINFRAME 以打開菜單編輯器;
  b、在菜單編輯器中,加入一個主菜單“注冊”,在“注冊”主菜單下加入兩個菜單項:“注冊ActiveX 控件”、“注銷ActiveX 控件”;
  3、給新建的菜單項“注冊ActiveX 控件”和“注銷ActiveX 控件”增加響應函數:
  b、在資源編輯器中,雙擊MENU 中的IDR_MAINFRAME 打開菜單編輯器,單擊“注冊ActiveX 控件”, 按Ctrl +W 打開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、"注銷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 不能運行。

總結

以上是生活随笔為你收集整理的VC++ OCX 控件注册的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。