- 註冊時間
- 2006-3-13
- 最後登錄
- 2025-1-10
- 在線時間
- 673 小時
- 閱讀權限
- 200
- 積分
- 417
- 帖子
- 1107
- 精華
- 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 |
|