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的主要内容,如果未能解决你的问题,请参考以下文章