zoukankan      html  css  js  c++  java
  • 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:SVNMatrix控件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;
    

      

  • 相关阅读:
    leetcode 337. House Robber III
    leetcode 366 Find Leaves of Binary Tree
    leetcode 250 Count Univalue Subtrees
    leetcode 132 Palindrome Pairs 2
    leetcode 131 Palindrome Pairs
    leetcode 336 Palindrome Pairs
    leetcode 214 Shortest Palindrome
    leetcode 9 Palindrome Number
    Socket编程
    Zookeeper
  • 原文地址:https://www.cnblogs.com/toosuo/p/3226193.html
Copyright © 2011-2022 走看看