首页 > 代码库 > delphi注册/反注册OCX

delphi注册/反注册OCX

uses ShellAPI; function ExecAndWait(const ExecuteFile, ParamString : string): boolean;var  SEInfo: TShellExecuteInfo;  ExitCode: DWORD;begin  FillChar(SEInfo, SizeOf(SEInfo), 0);  SEInfo.cbSize := SizeOf(TShellExecuteInfo);  with SEInfo do begin    fMask := SEE_MASK_NOCLOSEPROCESS;    Wnd := Application.Handle;    lpFile := PChar(ExecuteFile);    lpParameters := PChar(ParamString);    nShow := SW_HIDE;  end;  if ShellExecuteEx(@SEInfo) then  begin    repeat      Application.ProcessMessages;      GetExitCodeProcess(SEInfo.hProcess, ExitCode);    until (ExitCode <> STILL_ACTIVE) or Application.Terminated;    Result:=True;  end  else Result:=False;end; procedure RegisterOCX;type  TRegFunc = function : HResult; stdcall;var  ARegFunc : TRegFunc;  aHandle  : THandle;  ocxPath  : string;begin try  ocxPath :=E:\SVN\Matrix控件\JydMax.ocx ;//ExtractFilePath(Application.ExeName) + ‘Flash.ocx‘;  aHandle := LoadLibrary(PChar(ocxPath));  if aHandle <> 0 then  begin    ARegFunc := GetProcAddress(aHandle,DllRegisterServer);    if Assigned(ARegFunc) then    begin      ExecAndWait(regsvr32,/s  + ocxPath);    end;    FreeLibrary(aHandle);  end; except   ShowMessage(Format(Unable to register %s, [ocxPath])); end;end;  {1.} 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.} 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;

 

http://www.cnblogs.com/toosuo/p/3226193.html

 

delphi注册/反注册OCX