delphi注册/反注册OCX

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

delphi中用代码实现注册Ocx和Dll

delphi 中 如何注册ocx文件

如何注册DELPHI3中的HTML.OCX控件?

delphi 里如何加入OCX文件

请问vb如何自动注册ocx文件?

DLL和OCX注册