您的位置:首页 > 编程语言 > Delphi

Delphi中Ocx的动态注册方法

2006-04-26 21:33 633 查看
Delphi中Ocx的动态注册方法

方法1

uses windows;

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;

方法2

procedure TForm1.Button1Click(Sender: TObject);
var
  astr:String;
  bstr:String;
  ProcAddr:Pointer;
  DllAddr:Integer;
begin
  od1.Execute;
  astr:=od1.FileName+chr(0);
  DllAddr:=LoadLibrary(PChar(astr));
  if DllAddr<>0 then
    begin
      bstr:='DllregisterServer'+chr(0);
      //只要将以上处改为DllUnRegisterServer即不注册ActiveX控件
      ProcAddr:=GetProcAddress(DllAddr,PChar(bstr));
      if ProcAddr<>nil then
        CallWindowProc(ProcAddr,DllAddr,0,0,0)
      else
          ShowMessage(od1.FileName+'不是有效的控件');
      FreeLibrary(DllAddr);
    end
  else
      ShowMessage(od1.FileName+'无法装载');
end;

 

 

uses OLEctl {, ....};

interface

{...}

var
OCXHandle: THandle;
RegFunc: TDllRegisterServer;
begin
OCXHandle:= LoadLibrary('c:/XXX.ocx');
RegFunc := GetProcAddress(OCXHandle, 'DllRegisterServer');
if RegFunc <> 0 then ShowMessage('Error!');
FreeLibrary(OCXHand);
end;

或者
WinExec("regsvr32.exe/s yourocx.ocx",SW_NORMAL);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息