- 註冊時間
 - 2006-3-13 
 - 最後登錄
 - 2025-7-23 
 - 在線時間
 - 675 小時 
 - 閱讀權限
 - 200 
 - 積分
 - 417 
 - 帖子
 - 1109 
 - 精華
 - 0 
 - UID
 - 2 
  
 
 
 
    
 | 
 
一般處理註冊 OCX/ActiveX/DLL 的方式有修改系統機碼或用 RegSvr32.exe 來手動處理 
不過也可以在程式中透過呼叫 Windows API 來處理 
 
- type
 
 -   TDllRegisterServer = function: HResult; stdcall;
 
  
- function RegisterOCX(FileName: string): Boolean;
 
 - var
 
 -   OCXHand: THandle;
 
 -   RegFunc: TDllRegisterServer;
 
 - begin
 
 -   OCXHand := LoadLibrary(PChar(FileName));
 
 -   RegFunc := GetProcAddress(OCXHand, 'DllRegisterServer');
 
 -   if @RegFunc <> nil then
 
 -     Result := RegFunc = S_OK
 
 -   else
 
 -     Result := False;
 
 -   FreeLibrary(OCXHand);
 
 - end;
 
  
- function UnRegisterOCX(FileName: string): Boolean;
 
 - var
 
 -   OCXHand: THandle;
 
 -   RegFunc: TDllRegisterServer;
 
 - begin
 
 -   OCXHand := LoadLibrary(PChar(FileName));
 
 -   RegFunc := GetProcAddress(OCXHand, 'DllUnregisterServer');
 
 -   if @RegFunc <> nil then
 
 -     Result := RegFunc = S_OK
 
 -   else
 
 -     Result := False;
 
 -   FreeLibrary(OCXHand);
 
 - end;
 
  複製代碼 
- function RegisterServer(const aDllFileName: string; aRegister: Boolean): Boolean;
 
 - type
 
 -   TRegProc = function: HResult; stdcall;
 
 - const
 
 -   cRegFuncNameArr: array [Boolean] of PChar = ('DllUnregisterServer', 'DllRegisterServer');
 
 - var
 
 -   vLibHandle: THandle;
 
 -   vRegProc: TRegProc;
 
 - begin
 
 -   Result := False;
 
 -   vLibHandle := LoadLibrary(PChar(aDllFileName));
 
 -   if vLibHandle = 0 then Exit;
 
 -     @vRegProc := GetProcAddress(vLibHandle, cRegFuncNameArr[aRegister]);
 
 -   if @vRegProc <> nil then
 
 -     Result := vRegProc = S_OK;
 
 -   FreeLibrary(vLibHandle);
 
 - end;
 
  複製代碼 
 
不過需要注意的是,當你的程式是可以重複執行的話就要注意 UnRegister 的時機,若是先關閉的程式做了 UnRegister 處理的話,尚未結束執行的程式可是會出問題的。 
 
參考資料來源 http://www.swissdelphicenter.ch/en/showcode.php?id=1281 |   
 
  
 |