用代码实现注册Ocx和Dll

在windows系统中,可以通过Regsvr32来实现注册ocx或者dl,

编程时,调用Regsvr32来注册,却不能正常执行。尤其是在Win7系统中,需要管理员身份才能运行。

使用下面的代码则能正常注册。

//注册

function RegisterDllServer(FileName: string): boolean;
var
  nDllAddr: integer;
  bstr: string;
  ProcAddr: Pointer;
  str: PAnsiChar;
begin
  Result := False;

  if not FileExists(FileName) then
    exit;
   
  nDllAddr:=LoadLibrary(PWideChar(FileName));

  if nDllAddr <> 0 then
  begin
    bstr:='DllRegisterServer'+chr(0);
   
    str := PAnsiChar(AnsiString(bstr));
    ProcAddr := GetProcAddress(nDllAddr,str);
    if ProcAddr<>nil then
    begin
      CallWindowProc(ProcAddr,nDllAddr,0,0,0);
      Result := True;
    end;

    FreeLibrary(nDllAddr); 
  end;                    
end;

 

 

//反注册

function UnRegisterDllServer(FileName: string): boolean;
var
  nDllAddr: integer;
  bstr: string;
  ProcAddr: Pointer;
  str: PAnsiChar;
begin
  Result := False;
 
  if not FileExists(FileName) then
    exit;
   
  nDllAddr:=LoadLibrary(PWideChar(FileName));

  if nDllAddr <> 0 then
  begin
    bstr:='DllUnregisterServer'+chr(0);
   
    str := PAnsiChar(AnsiString(bstr));
    ProcAddr := GetProcAddress(nDllAddr,str);
    if ProcAddr<>nil then
    begin
      CallWindowProc(ProcAddr,nDllAddr,0,0,0);
      Result := True;
    end;

    FreeLibrary(nDllAddr); 
  end;                    
end;

时间: 2024-10-28 04:40:05

用代码实现注册Ocx和Dll的相关文章

怎样注册OCX?

       我们在编写程序的过程中,时常有一些比较好的控件,想用到自己的程序中,那么就首先要知道如何来注册ocx控件,下面以Formula控件为例进行说明:    在目标机器上注册 Formula One 组件    在编程中实现注册,代码如下: 1)在 local external function 中定义函数 :     Function long DllRegisterServer() Library "vcf15.ocx" 2)在 Formula One 控件的 Constr

注册ocx 成功 js 验证不成功为什么 啊

问题描述 注册ocx 成功 js 验证不成功为什么 啊 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESOFTWAREClassesTypeLib{52D21AF2-204D-4ED1-BC78-B53A40C81E31}1.0win32] @="AYDKClientPlayer.ocx" 下面是js 代码 测试没有注册 try{ var obj = new ActiveXObject("F83BD944-AE

win7 64位无法注册ocx

问题描述 win7 64位无法注册ocx 不过放在system32或者syswow64目录来调用regsvr32都报[Window Title] RegSvr32 [Content] 模块"c:WindowsSysWOW64ActiveXDemo.ocx"可能与您正在运行的 Windows 版本不兼容.检查该模块是否与 regsvr32.exe 的 x86 (32 位)或 x64 (64 位)版本兼容. [确定] 解决方案 下载这个地址内容http://pan.baidu.com/s/

c# 4 0-利用c#代码 访问注册表 不能向注册表里修改数据 求助

问题描述 利用c#代码 访问注册表 不能向注册表里修改数据 求助 我要实现的是通过对注册表的修改 实现隐藏和显示桌面图标 谢谢各位上面的代码就不写了 主要的是 try { int i = 1; RegistryKey key = Registry.CurrentUser; RegistryKey hide = key.OpenSubKey(@""SoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced"" true

安装 .Net Framework 1.1 时无响应,提示“正在注册System.EnterpriseServices.dll”的解决方案

安装 .Net Framework (以下简称 FWK)一般来说是很简单的事情,直接Next 就可以搞定,但世事无常态,总会有意外,今天就遇到一个. 从MS下载最新的dotnetfx安装包,进行安装时,安装到最后一只停顿在"正在注册System.EnterpriseServices.dll "的画面,长时间无响应(有个客户等了1个多小时,仍然没反应).如果FWK安装不上,则基于其上开发的Application就无法运行.此问题必须解决.   都是网络上混的,遇到问题,肯定第一个就是 s

windows-用inno setup制作安装包用来自动注册.ocx

问题描述 用inno setup制作安装包用来自动注册.ocx 用inno setup制作安装包用来自动注册.ocx,如何在32和64位系统都把ocx控件都放在C:WindowsSystem32并注册因为在程序中引用的ocx控件都在C:WindowsSystem32下, 用inno setup做出来的安装包,在32的系统下运行可以把ocx控件可以放到C:WindowsSystem32下,但是在64位的系统中运行却给我把ocx控件放到了C:WindowsSysWOW64下,路径写死都不管用,求大神

ioc反转-java 代码解耦 注册机制

问题描述 java 代码解耦 注册机制 我想写一个服务,这个服务接受信息,如果有另外的服务想得到我的信息,只需要向我注册一下,给我一个接口,我就把服务转发给他,我接受信息的服务不用做任何改变,这样的东西应该用什么技术实现? 解决方案 我觉得应该会用到注册服务中心,Zookeeper.你可以考虑一下~ 解决方案二: Dubbo和Zookeeper一起用 看这里http://blog.csdn.net/evankaka/article/details/48009645

在windows驱动代码中用汇编调用user32.dll中的MessageBoxA函数出错

问题描述 在windows驱动代码中用汇编调用user32.dll中的MessageBoxA函数出错 _asm { push eax; push ecx; push 0; push 0; push 0; push 0; mov ecx, MessageBoxAAddr; lea eax, mark; push eax; jmp ecx; mark: mov eax, eax; mov ebx, ebx; mov ecx, ecx; pop ecx; pop eax; } 其中MessageBox

vc++-ocx在dll中的调用(关于vc里的mfc)

问题描述 ocx在dll中的调用(关于vc里的mfc) dll里边封装了一个对话框,现在在这个对话框里边insert activex control一个ocx控件,调用这个dll,对话框弹不出来, 若没有加入这个ocx,调用dll会弹出对话框 解决方案 很像是里面发生异常了,可以试试debugview看能抓到异常信息不.