bestlong 怕失憶論壇

 

 

搜索
bestlong 怕失憶論壇 論壇 Delphi 如何在程式中註冊 OCX/ActiveX/DLL
查看: 7430|回復: 1
go

如何在程式中註冊 OCX/ActiveX/DLL [複製鏈接]

Rank: 9Rank: 9Rank: 9

1#
發表於 2007-12-14 10:25 |只看該作者 |倒序瀏覽 |打印
一般處理註冊 OCX/ActiveX/DLL 的方式有修改系統機碼或用 RegSvr32.exe 來手動處理
不過也可以在程式中透過呼叫 Windows API 來處理

  1. type
  2.   TDllRegisterServer = function: HResult; stdcall;

  3. function RegisterOCX(FileName: string): Boolean;
  4. var
  5.   OCXHand: THandle;
  6.   RegFunc: TDllRegisterServer;
  7. begin
  8.   OCXHand := LoadLibrary(PChar(FileName));
  9.   RegFunc := GetProcAddress(OCXHand, 'DllRegisterServer');
  10.   if @RegFunc <> nil then
  11.     Result := RegFunc = S_OK
  12.   else
  13.     Result := False;
  14.   FreeLibrary(OCXHand);
  15. end;

  16. function UnRegisterOCX(FileName: string): Boolean;
  17. var
  18.   OCXHand: THandle;
  19.   RegFunc: TDllRegisterServer;
  20. begin
  21.   OCXHand := LoadLibrary(PChar(FileName));
  22.   RegFunc := GetProcAddress(OCXHand, 'DllUnregisterServer');
  23.   if @RegFunc <> nil then
  24.     Result := RegFunc = S_OK
  25.   else
  26.     Result := False;
  27.   FreeLibrary(OCXHand);
  28. end;
複製代碼

  1. function RegisterServer(const aDllFileName: string; aRegister: Boolean): Boolean;
  2. type
  3.   TRegProc = function: HResult; stdcall;
  4. const
  5.   cRegFuncNameArr: array [Boolean] of PChar = ('DllUnregisterServer', 'DllRegisterServer');
  6. var
  7.   vLibHandle: THandle;
  8.   vRegProc: TRegProc;
  9. begin
  10.   Result := False;
  11.   vLibHandle := LoadLibrary(PChar(aDllFileName));
  12.   if vLibHandle = 0 then Exit;
  13.     @vRegProc := GetProcAddress(vLibHandle, cRegFuncNameArr[aRegister]);
  14.   if @vRegProc <> nil then
  15.     Result := vRegProc = S_OK;
  16.   FreeLibrary(vLibHandle);
  17. end;
複製代碼


不過需要注意的是,當你的程式是可以重複執行的話就要注意 UnRegister 的時機,若是先關閉的程式做了 UnRegister 處理的話,尚未結束執行的程式可是會出問題的。

參考資料來源 http://www.swissdelphicenter.ch/en/showcode.php?id=1281
我是雪龍
http://blog.bestlong.idv.tw
http://www.bestlong.idv.tw

Rank: 9Rank: 9Rank: 9

2#
發表於 2007-12-14 10:28 |只看該作者
另外要注意的是 DllRegisterServer 與 DllUnregisterServer 兩個參數的大小寫都要正確
我是雪龍
http://blog.bestlong.idv.tw
http://www.bestlong.idv.tw
‹ 上一主題|下一主題

Archiver|怕失憶論壇

GMT+8, 2024-5-17 10:49 , Processed in 0.009861 second(s), 10 queries .

Powered by Discuz! X1.5

© 2001-2010 Comsenz Inc.