• 方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册

    示例:
    regsvr32 netshare.ocx     //注册netshare.ocx控件
    regsvr32 /u netshare.ocx    //解除netshare.ocx控件的注册

    如果netshare.ocx文件不在system目录时,还必须在文件名前加上完整的路径。除了regsvr32应用程序之外,Microsoft在它的 web 站点上还提供了一个称为regclean.exe 的程序,可以检查注册表并去掉丢失的组件在注册表中的条目。regclean.exe 除了可以删除 “悬挂” 的条目,它还提供一个“undo” 文件帮助恢复错误的删除。

    用 regsvr32.exe 注册 activeX 控件虽然简单,但需要用户手工进行注册,在不用时还需手工解除注册。

    方法二:用 install shield,在里面选 “self-registered”,安装程序将自动注册;

    方法三:api 函数注册

    此方法的设计思路是:先将 activeX 控件载入内存,然后验证其有效性,最后直接在内存地址中执行其注册函数(DllRegisterServer、 DllUnregisterServer)。
    其编程方法是:

    1、使用Windows api 函数Loadlibrary 载入activeX 控件;
    2、使用GetProcAddress 函数获取activeX 控件中注册函数DllRegisterServer(注销函数为 DllUnregisterServer)指针;
    3、使用CallwindowProc 函数执行已载入内存的activeX 控件注册函数(DllRegisterServer、 DllUnregisterServer)。

    示例:

    typedef int (callback* myfunction)(void);
    myfunction  myfunction = null;
    hinstance handle = null ;
    handle = LoadLibrary("trdragdroptreectrl.ocx");

    if( handle != null )
    {
          myfunction = GetProcAddress(handle, "DllRegisterServer");
          if( myfunction != null )
          {
                myfunction();
          }
    }

    小小经验:
    1、有时候在程序中使用ocx控件时失效,检查一下调用之间是否执行了afxoleinit()。如果使用了容器,还需要保证执行了 afxEnableControlContainer()
    2、使用Activex Control Test Container 可以很方便地测试制作出来的ocx控件(从开始菜单-》程序-》Microsoft Visual Studio 6.0 -> Microsoft Visual Studio 6.0 Tools 可以看到该工具)
    3、有时候控件制作的没有问题,注册方式也对,但是注册的时候确失败了,可能时dll的版本不对,使用Dependencies查看ocx控件依赖dll是否跟现在使用的dll版本一致。

    ////////////////////////////////////////////////////////////////////////////////////////////////////

    转自:http://www.cctry.com/thread-2418-1-1.html

    ActiveX 控件是一个动态链接库,是作为基于COM 服务器进行操作的,并且可以嵌入在包容器宿主应用程序中,ActiveX 控件的前身就是OLE 控件。由于ActiveX 控件与开发平台无关,因此,在一种编程语言上开发的ActiveX 控件可以无须作任何修改,即可在另一种编程语言中使用,其效果如同使用Windows 通用控件一样。如:在VC ++中开发的ActiveX 控件,不作任何修改即可应用于VB 中。由此可见,通过使用ActiveX 控件即可实现快速小型的组件重用、代码共享,从而提高编程效率。

      从Internet 下载的ActiveX 控件,或从其他途径得到的ActiveX 控件,用户应该怎样做才能正确使用呢?一般来说,一个外来ActiveX 控件要在Windows 中被正确使用,首先必须将控件文件( *.OCX) 复制到硬盘中,然后将其在Windows 中注册,未在Windows 中注册过的ActiveX 控件是不能使用的。注册ActiveX 控件一般来说有三种途径,适用范围不同,各有各的优点,下面分别讨论。

      一、使用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 控件。方法如下:
    启动InstallShield,使用Project Wizard 建立一个新的项目;
    新建一个“File Group",将需要注册的ActiveX 控件文件放入此“File Group"中;
    将上述“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 控件”,步骤如下:
      a、单击VC ++6.0 左边窗口的“ResoureView",双击MENU 项目下的IDR_MAINFRAME 以打开菜单编辑器;
      b、在菜单编辑器中,加入一个主菜单“注册”,在“注册”主菜单下加入两个菜单项:“注册ActiveX 控件”、“注销ActiveX 控件”;
      3、给新建的菜单项“注册ActiveX 控件”和“注销ActiveX 控件”增加响应函数:
      b、在资源编辑器中,双击MENU 中的IDR_MAINFRAME 打开菜单编辑器,单击“注册ActiveX 控件”, 按Ctrl +W 打开MFC Class Wizard; 
      c、双击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);
    }

      c、"注销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 不能运行。

VC++如何在程序中用代码注册和卸载ocx控件(代码)的更多相关文章

  1. 帮同事写了几行代码,在 安装/卸载 程序里 注册/卸载 OCX控件

    写了个小控制台程序,这个程序用来注册 / 卸载OCX控件,用在Inno Setup做的安装卸载程序里. #include "stdafx.h" #include <windo ...

  2. VC++注册,卸载OCX控件,以及判断是否注册

    注册OCX控件 BOOL CYourClass::RegistOcx() { HINSTANCE hLib = LoadLibrary("NTGraph.ocx");      / ...

  3. 如何注册dll、ocx控件

    在程序集成时,有时需要对厂家提供的dll或者ocx控件进行注册.其一般操作为:开始>命令指示符(右击管理员身份运行)>regsvr32 文件路径. 比如对devocx.ocx进行注册,在F ...

  4. VFP中OCX控件注册检测及自动注册

    这是原来从网上搜集.整理后编制用于自己的小程序使用的OCX是否注册及未注册控件的自动注册函数. CheckCtrlFileRegist("ctToolBar.ctToolBarCtrl.4& ...

  5. OCX控件的注册卸载,以及判断是否注册

    方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册 示例:regsvr32 netshare.ocx     //注册netshare.ocx控件regsvr ...

  6. Dll,OCX控件的注册(转)

    原文地址:http://home.51.com/heiyijiushi/diary/item/10053693.html C#自动实现Dll(OCX)控件注册的两种方法2012-07-31 21:20 ...

  7. SNF快速开发平台MVC-各种级联绑定方式,演示样例程序(包含表单和表格控件)

    做了这么多项目,经常会使用到级联.联动的情况. 如:省.市.县.区.一级分类.二级分类.三级分类.仓库.货位. 方式:有表单需要做级联的,还是表格行上需要做级联操作的. 实现:实现方法也有很多种方式. ...

  8. Ocx控件注册不成功?可能是tlb文件导致~

    Ocx文件是最常用的文件,实际操作中常常需要注册之~ 但是问题来了,经常会出现注册不成功的问题: 解决方法: 1.以“管理员身份”注册 2.Dependency Walker查看依赖是否缺失 3.查看 ...

  9. 将OCX控件打包成EXE,实现双击后自动注册<转>

    工具:2345好压[其他压缩软件应该大同小异] 第一步:首先将要打包的OCX控件,以及该控件所依赖的DLL文件放到桌面: 第二步:1.新建文本文档,取名 register.txt,文档内写入   re ...

随机推荐

  1. Mysql auto_increment 重新计数(让id从1开始)

    当清空一个表的时候,重新插入数据,发现auto_increment属性的字段计数不是从1开始的时候,可以使用以下命令   方法一 delete from test; alter table `test ...

  2. Myeclipse中java文件注释格式设置

    点击菜单windows->preferences,然后在左侧栏选择java ->Code Style -> CodeTemplates然后在右侧栏选择comments -> 依 ...

  3. window下安装FTP服务器

    系统window8.1 1.安装IIS组件:点开始菜单-选择控制面板--程序--打开或关闭WINDOWS功能--展开Internet信息服务,勾选FTP服务器(包括FTP服务和FTP扩展性),点确定. ...

  4. JS截取字符串方法

    function textSubstr(str,sub_length){ str = str.trim(); var temp1 = str.replace(/[^\x00-\xff]/g," ...

  5. (转)Apple Push Notification Services in iOS 6 Tutorial: Part 1/2

    转自:http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1 Upda ...

  6. 十二.200多万元得到的创业教训--app名字是关键

    摘要:当完毕了一个app后,就要须要上应用市场,以下讲一下起名和上应用市场的一些技巧. 健生干货分享:第12篇 1.必须是先上app store,再上其它应用市场 为啥要这样做?由于app store ...

  7. 函数返回char* 的解决方案

    在C语言中,自动变量在堆栈中分配内存.当包含自动变量的函数或代码块退出时,它们所占用的内存便被回收,它们的内容肯定会被下一个所调用的函数覆盖.这一切取决于堆栈中先前的自动变量位于何处,活动函数声明了什 ...

  8. LDAP-常用命令

    1.recreating default ads instance ./ [root@dhcppc2 ~]# dsadm delete /usr/local/dsee7/var/dcc/ads #de ...

  9. django: template using & debug

    模板的作用方法有如下三种: blog/views.py: from django.template import loader, Context, Template from django.http ...

  10. Android推送等耗电原因剖析

    原文链接:http://www.jianshu.com/p/584707554ed7 Android手机有两个处理器,一个是Application Processor(AP)基于ARM处理器,主要运行 ...