关于Windows中ActiveX控件注册

原创 2001年05月22日 12:30:00
关于Windows中ActiveX控件注册
2000-03-21· 陈再·stu93j

自从Microsoft公司于1996年推出ActiveX技术以来,ActiveX技术已得到了许多软件公司的支持和响应,并纷纷在其产品中融入ActiveX技术。而作为ActiveX技术之一的ActiveX控件也得到了迅猛的发展,不但各大软件公司推出了不少ActiveX 控件,ActiveX控件更是得到一般开发者的喜爱。那么,什么是ActiveX控件呢?ActiveX控件是一个动态链接库,是作为基于COM服务器进行操作的,并且可以嵌入在包容器宿主应用程序中,ActiveX控件的前身就是OLE控件。由于ActiveX控件与开发平台无关,因此,在一种编程语言上开发的ActiveX控件可以无须任何修改,即可在另一种编程语言中使用,其效果如同使用Windows通用控件一样。如:在VC++中开发的ActiveX控件,不作任何修改即可应用于VB中。由此可见,通过使用ActiveX控件即可实现快速小型的组件重用、实现代码共享,从而提高编程效率。从上面亦可看出为何ActiveX控件如此广泛地受到开发者的欢迎。

   因为ActiveX控件的可重用性,加上Internet的普及,ActiveX控件得到了极大的发展,目前,从Internet上可以得到相当多的ActiveX控件,而且品种繁多,所完成的任务几乎无所不包。对普通开发者来说,只要有耐心,都能从Internet上找到符合自己要求的ActiveX控件。

   从Internet下载的ActiveX控件,或从其他途径得到的ActiveX控件,用户应该怎样做才能正确使用ActiveX控件或将其应用于自己的程序中呢?一般来说,一个外来ActiveX控件要在Windows中被正确使用,首先必须将控件文件(*.OCX)复制到硬盘中,然后将其在Windows中注册,未在Windows中注册过的ActiveX控件是不能使用的。注册ActiveX控件一般来说有三种途径:

   1. 使用Regsvr32.exe程序对ActiveX控件进行注册;

   2. 使用安装程序制作软件:InstallShield;

   3. 在应用程序中加入注册代码。

   上述方法适用范围不同,各有各的优点,下面分别讨论。

   一、 使用Regsvr32.exe程序对ActiveX控件进行注册

   对于未注册过的ActiveX控件可使用此软件对其进行注册,外来ActiveX控件要应用到自己的程序中也必须进行注册。该文件位于Windows目录的system子目录下。使用方法如下:点击“开始”→“运行”;在运行对话框中输入以下命令:

regsvr32  < 文件名 >        注册一个ActiveX控件
regsvr32  /u  < 文件名 >    解除某ActiveX控件的注册
   我们使用一些带ActiveX控件的应用程序时,有时会出现不能运行的情况,这有可能是其自带ActiveX控件未注册所至,这时不妨使用上述命令一试。另外,VC++使用者若对regsvr32.exe的编码感兴趣的话,可在VC++的联机帮助中找到其源代码。若使用VC++ 6.0,则在MSDN光盘的/sample/VC98/MFC/controls/regsvr中。

   二、 使用安装程序制作软件:InstallShield

   使用regsvr32.exe来注册ActiveX控件虽然简单,但需要用户手工注册,在不用时还得手工解除注册,因此,这对一个应用程序来说并非好的解决方案。大型应用软件一般都有一个安装程序,在安装程序中解决ActiveX控件注册是较为理想的一种方案。使用InstallShield可以制作出专业级的Setup,还可注册其中的ActiveX控件;而且,在以后携载软件时,自动注销掉以前注册的ActiveX控件。方法如下:

   1. 启动InstallShield,使用Project Wizard建立一个新的项目;

   2. 新建一个“File Group”,将需要注册的ActiveX控件文件放入此“File Group”中;

   3. 将上述“File Group”的“Self-Registered”属性设置成“Yes”。

   上述步骤仅为制作Setup中设置自动注册ActiveX控件几步,至于使用InstallShield怎样制作一个完整的Setup不在本文讨论范围之中,请读者自己参看有关书籍。

   三、 在应用程序中加入注册代码

   对于小型程序不宜采取第二种方法,较好的方法是在程序中嵌入注册代码,实现应用程序自注册。其编程方法是:

   1. 使用Windows API函数LoadLibrary载入ActiveX控件;

   2. 使用GetProcAddress函数获取ActiveX控件中注册函数DllRegisterServer(注销函数为DllUnregisterServer)指针;

   3. 调用注册函数DllRegisterServer(或注销函数DllUnregisterServer)。

   下面以VC++ 6.0编写的RegActivex程序为例,介绍怎样在程序中自动注册(注销)ActiveX控件。RegActivex的主体框架由VC++ 6.0的AppWizard自动产生,在其基础上增加两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”。当选择“注册ActiveX控件”菜单时,将对控件toweratl.ocx(一个汉诺游戏)进行注册;当选择“注销ActiveX控件”菜单时,将解除控件toweratl.ocx的注册。

   1. 使用VC++ 6.0建立一个单文档的应用程序RegActivex,其他项目接受默认设置;

   2. 给应用程序增加两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”,步骤如下:

   ① 单击VC++ 6.0左边窗口的“ResoureView”,双击MENU项目下的IDR_MAINFRAME以打开菜单编辑器;

   ② 在菜单编辑器中,加入一个主菜单“注册”,在“注册”主菜单下加入两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”;

   3. 给新建的菜单项 “注册ActiveX控件” 和“注销ActiveX控件”增加响应函数:

   ① 在资源编辑其中,双击MENU中的IDR_MAINFRAME打开菜单编辑器,单击“注册ActiveX控件”,按Ctrl+W打开MFC Class Wizard;

   ② 双击Messages框中的COMMAND,给“注册ActiveX控件”菜单项增加响应函数OnRegisterReg(),单击右边“Edit”按钮给OnRegisterReg()函数增加如下代码:

void CMainFrame::OnRegisterReg()
  {
  //ActiveX控件的路径及文件名
  LPCTSTR pszDllName="toweratl.ocx";
        //装载ActiveX控件
  HINSTANCE hLib = LoadLibrary(pszDllName);
        if (hLib < (HINSTANCE)HINSTANCE_ERROR)
        {
                MessageBox("不能载入Dll文件!","结果",MB_OK);
                return;
        }
  //获取注册函数DllRegisterServer地址
        FARPROC lpDllEntryPoint; 
        lpDllEntryPoint = GetProcAddress
(hLib,_T("DllRegisterServer"));
        //调用注册函数DllRegisterServer
 if(lpDllEntryPoint!=NULL)
        {
                if(FAILED((*lpDllEntryPoint)()))
                {
MessageBox("调用DllRegisterServer 
失败!","结果",MB_OK);
FreeLibrary(hLib);
return;
                };
MessageBox("注册成功","结果",MB_OK);
        }
        else
MessageBox("调用DllRegisterServer失败!"
,"结果",MB_OK);
}
   ③ “注销ActiveX控件”菜单项响应函数的编写方法同上,代码也相似,只是将
“lpDllEntryPoint=GetProcAddress
(hLib,_T("DllRegisterServer"));”改成:
        lpDllEntryPoint = GetProcAddress
(hLib,_T("DllUnregisterServer"))。
   4. 编译联接上述程序,即可得一个可执行文件。另需注意的是:应将ActiveX控件文件toweratl.ocx复制到Windows的system目录下。控件文件toweratl.ocx在微软出版的《Visual C++ 6.0程序员指南》所附光盘中可以找到。

   5. 测试上述程序:运行《Visual C++ 6.0程序员指南》所附光盘中的game2程序,若使用RegActivex注册了toweratl.ocx控件,则该程序可以正常运行;若使用RegActivex注销了toweratl.ocx控件则game2不能运行。


ActiveX控件的注册和反注册

一:用MFC生成的ActiveX控件,需要注册之后才能使用。 注意:注册与反注册都需要管理员权限,才能操作成功。 注册命令:regsvr32 "E:\Clock.ocx" 反注册命令:regsvr32...
  • piaopiaopiaopiaopiao
  • piaopiaopiaopiaopiao
  • 2014年12月01日 17:11
  • 3540

在VS2010中ActiveX控件注册方法,使用regsvr32命令

上一篇小编展示了如何设置VS2010自带的ActiveX控件的容器测试程序,现在为大家演示一下如何注册ActiveX控件。   首先简单了解一下ActiveX控件的知识,ActiveX控件:简单来说...
  • u014028070
  • u014028070
  • 2014年08月02日 23:26
  • 3277

使用Regsvr32.exe程序注册/注销ActiveX控件

使用ActiveX控件之前需要注册该控件。   使用Regsvr32.exe程序可以注册、注销ActiveX控件。   Regsvr32.exe程序位于Windows目录的system子目...
  • xiaoyusmile
  • xiaoyusmile
  • 2014年08月21日 15:49
  • 3035

在Win7 64位注册ActiveX控件

首先必须以管理员身份运行cmd.exe,即在cmd.exe右键选择以管理员身份运行。   目前共有两个存在网络盘的文件需要注册,一个dll,一个ocx。   开始时将两个文件都拷贝到c:\wind...
  • jiftlixu
  • jiftlixu
  • 2013年08月08日 10:35
  • 2953

未在此计算机上注册ActiveX控件!!!

1、 将active文件夹内的.ocx文件复制到C盘Windows下的systerm32文件夹内(一般是MSCOMM32.OCX即可) (在win64位系统下注册32位ocx或dll需要将32位oc...
  • tingge1992
  • tingge1992
  • 2017年07月13日 17:11
  • 563

Windows中注册ActiveX控件的方法(转载)

一般来说,一个外来ActiveX控件要在Windows中被正确使用,首先必须将控件文件(*.OCX)复制到硬盘中,然后将其在Windows中注册,未在Windows中注册过的ActiveX控件是不能使...
  • ttgoo
  • ttgoo
  • 2010年07月15日 16:15
  • 5229

Flash Player ActiveX 控件无法注册的解决方法汇编

Flash Player ActiveX 控件无法注册的解决方法汇编
  • boomcode
  • boomcode
  • 2017年04月06日 10:17
  • 510

c#开发activex注册问题

最近使用c#开发activex,遇到一个问题,生成的dll文件在本地可以嵌入到web里面,但是到其他机器上就会出现activex无法加载的情况,页面里面出现一个红色的X。mfc开发的activex是使...
  • lxp116
  • lxp116
  • 2013年01月16日 14:21
  • 4554

ActiveX控件注册的几种方法

-----本文中的程序原为VC++所编写,老妖略改动一些,将程序用C++Builder编写。-----ActiveX控件是一个动态链接库,是作为基于COM服务器进行操作的,并且可以嵌入在包容器宿主应用...
  • csw_100
  • csw_100
  • 2010年01月08日 10:44
  • 1250

注册ActiveX控件 未在此计算机上注册ActiveX控件!!!

拿到一个别人发给我的ActiveX控件Use项目 但是用VS2008打开项目后,点击资源试图中的Dialog的IDD,出现“未在此计算机上注册ActiveX控件”的提示 解决方法: 转自...
  • u014029393
  • u014029393
  • 2018年01月08日 11:02
  • 73
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于Windows中ActiveX控件注册
举报原因:
原因补充:

(最多只允许输入30个字)