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

时间: 2024-08-04 13:06:54

delphi注册/反注册OCX的相关文章

dll的注册与反注册

regsvr32.exe是32位系统下使用的DLL注册和反注册工具,使用它必须通过命令行的方式使用,格式是:regsvr32 [/i[:cmdline]] DLL文件名命令可以在“开始→运行”的文本框中,也可以事先在bat批处理文档中编写好命令.未带任何参数是注册DLL文件功能,其它参数对应功能如下:/u:反注册DLL文件;/s:安静模式(Silent)执行命令,即在成功注册/反注册DLL文件前提下不显示结果提示框./c:控制端口;/i:在使用/u反注册时调用DllInstall;/n:不调用D

ActiveX控件的注册和反注册

原文转自 https://blog.csdn.net/piaopiaopiaopiaopiao/article/details/41649495 ActiveX控件,需要注册之后才能使用. 注意:注册与反注册都需要管理员权限,才能操作成功. 注册命令:regsvr32 "E:\Clock.ocx" 反注册命令:regsvr32 /u "E:\Clock.ocx" 在此介绍两个实用工具: 工具一:RegDllView 功能:查看电脑中已注册的组件(dll,exe,oc

[C#反编译教程]001.Reflector.NET反编译工具 v8.5绿色版+注册机+注册教程

截图 下载地址 Reflector.NET反编译工具 v8.5绿色版+注册机 下载地址:http://pan.baidu.com/s/1mgN1Cpi 密码:mx19 简介 .NET Reflector是一个类浏览器和反编译器,.NET Reflector可以分析程序集并向你展示它的所有秘密..NET 框架向全世界引入了可用来分析任何基于 .NET 的代码(无论它是单个类还是完整的程序集)的反射概念.反射还可以用来检索有关特定程序集中包含的各种类.方法和属性的信息.使用 .NET Reflect

VC++如何在程序中用代码注册和卸载ocx控件(代码)

方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册 示例:regsvr32 netshare.ocx     //注册netshare.ocx控件regsvr32 /u netshare.ocx    //解除netshare.ocx控件的注册 如果netshare.ocx文件不在system目录时,还必须在文件名前加上完整的路径.除了regsvr32应用程序之外,Microsoft在它的 web 站点上还提供了一个称为regclean.exe 的程序,

springcloud 服务注册、反注册 AOP 拦截,实现自定义功能

@Aspect@Component@Order(1000)public class EurekaServerAspect { private Logger logger = Logger.getLogger(getClass()); @Autowired IRegisterSevice registerSevice; @Pointcut("execution(public * org.springframework.cloud.netflix.eureka.server.EurekaServer

反注册(LiveData的反注册生命周期)

LifecycleBoundObserver 中提供了一个 detachObserver() 方法,只有这个方法里面,会进行生命周期的反注册功能. @MainThread public void removeObserver(@NonNull final Observer<? super T> observer) { //判断如果不是主线程则抛异常 assertMainThread("removeObserver"); //mObservers 是属于这个 LiveData

服务关闭时注册和反注册

实现部分 package util import ( "context" "fmt" "go.etcd.io/etcd/clientv3" "time" ) type Service struct { client *clientv3.Client } func NewService() *Service { config := clientv3.Config{ Endpoints: []string{"106.12

30.普通API集成到go-micro体系中(2):代码注册与反注册

首先理一下思路,使用代码去注册其他api到go-micro体系中,我们就需要在代码中模拟出这样的json数据,并发送给我们的micro Registry服务 { "jsonrpc": "2.0", "method": "Registry.Deregister", "params": [{ "name": "api.jtthink.com.test", "ve

RedGate .NET Reflector注册问题(反注册)

Reflector分为桌面版和VS集成版本,当我们使用注册机注册的时候如果注册了Standvard版本,那么我们的VS就不能集成查看,也不能Debug,那么这 显然不是我们想要的,我们会选择重新注册,但是就遇到无法再次注册,即使卸载也无法注册: 打开这个地址 C:\Users\XXX\AppData\Local\Red Gate\Licenses在这个目录下面有我们注册的文件,删除即可