方法一:在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 )}
方法四:**呼叫regsvr32.exe
//vb寫法
shell "regsvr32.exe 控制項.ocx /s "
//vc寫法
::shellexecute(null,null,"regsvr32.exe","/s d:\\新建資料夾\\test\\test\\release\\test.reg ",null,null);
//新增reg檔案進入登錄檔
::shellexecute(null,null,"regedit.exe","/s d:\\新建資料夾\\test\\test\\release\\test.reg ",null,null);
注釋:/s標題不彈出訊息框。
小小經驗:
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版本一致。
regsvr32.exe 命令說明和引數
「regsvr32 [/s] [/n] [/i(:cmdline)] dllname」。其中dllname為activex控制項檔名,建議在安裝前拷貝到system資料夾下。
引數有如下意義:
/u——反註冊控制項
/s——不管註冊成功與否,均不顯示提示框
/c——控制台輸出
/i——跳過控制項的選項進行安裝(與註冊不同)
/n——不註冊控制項,此選項必須與/i選項一起使用
執行該命令的方法:
1、可以在「開始」--「執行」,調出執行的對話方塊,也可以使用win+r熱鍵,然後直接在輸入欄輸入即可
2、在開始--執行 輸入cmd,調出『命令提示符』視窗,然後再執行regsvr32命令。
方法三示例:
註冊控制項
bool cyourclass::registocx()
//獲取註冊函式dllregisterserver位址
farproc lpdllentrypoint;
lpdllentrypoint = getprocaddress(hlib,"dllregisterserver");
//呼叫註冊函式dllregisterserver
if(lpdllentrypoint!=null)
;//messagebox(handle,"註冊成功!","reg",mb_ok);
messagebox("ocx註冊成功!");
}else
messagebox("ocx註冊失敗!");
//messagebox(handle,"呼叫dllregisterserver失敗!","失敗ing..",mb_ok);
}解除安裝控制項
bool cyourclass::unregistocx()
//獲取註冊函式dllregisterserver位址
farproc lpdllentrypoint;
lpdllentrypoint = getprocaddress(hlib,"dllunregisterserver");//注意這裡是dllunregisterserver。
//呼叫註冊函式dllregisterserver
if(lpdllentrypoint!=null)
;//messagebox(handle,"登出成功!","unreg",mb_ok);
messagebox("ocx登出成功!");
}else
//messagebox(handle,"呼叫dllunregisterserver失敗!!!","結果",mb_ok);
messagebox("ocx呼叫dllunregisterserver失敗!!!");
}判斷是否註冊
bool cyourclass::isregistocx()
如果是vc程式建議使用第三種,直接載入控制項暴露的註冊和解除安裝函式, 高效
OCX控制項的註冊解除安裝,以及判斷是否註冊
方法一 在dos或windows命令列下執行 regsvr32 ocxname.ocx 註冊 示例 regsvr32 netshare.ocx 註冊netshare.ocx控制項 regsvr32 u netshare.ocx 解除netshare.ocx控制項的註冊 如果netshare.ocx檔...
OCX控制項的註冊解除安裝,以及判斷是否註冊
方法一 在dos或windows命令列下執行 regsvr32 ocxname.ocx 註冊 示例 regsvr32 netshare.ocx 註冊netshare.ocx控制項 regsvr32 u netshare.ocx 解除netshare.ocx控制項的註冊 如果netshare.ocx檔...
Ocx控制項註冊不成功?可能是tlb檔案導致
ocx檔案是最常用的檔案,實際操作中常常需要註冊之 但是問題來了,經常會出現註冊不成功的問題 解決方法 1 以 管理員身份 註冊 2 dependency walker檢視依賴是否缺失 3 檢視ocx 最後的辦法 tlb檔案是什麼?tlb type library 檔案是乙個說明檔案,通過tlb檔案...