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

方法一:在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控件进行视频播放的开发,将控件发给现场工程人员时,在注册控件时总是会遇到各种各样的问题,今天把注册失败可能的原因进行总结下: 1.控件注册方法 windows+x->命令行提示符( ...

  2. C# dsoframer.ocx 控件注册

    转自:http://blog.csdn.net/shuaishifu/article/details/38412643 C# 应用程序中嵌入了 Word 窗体,运行程序调用 Word 窗体的时候报错. ...

  3. ocx控件注册失败常见问题

    注册及卸载: regsvr32 name.ocx                 //注册name.ocx控件 regsvr32 /u name.ocx             //解除name.oc ...

  4. 菜鸟讲堂之 OCX控件注册

    今天敲学生信息管理系统,发现vb中没有MSHFlexGrid控件.于是下载了一个MSHFLXGD.OCX放到 C:\Windows\System32文件夹下,当打开"开始"菜单-选 ...

  5. ocx控件注册和注销等使用相关

    注册方式 ocx控件的安装方式有很多种,这里介绍最简单的一种. 步骤: 1.进入开始,点击运行. 2.在出现的框中键入regsvr32  C:\xxxx.ocx .(XXXX为控件名, C:\为目录) ...

  6. C#自动实现Dll(OCX)控件注册的两种方法

    打印这篇文章 尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写.当需要用到Dll引用的时候 ...

  7. 详解两种C#自动实现DLL(OCX)控件注册的方法

    本文将为大家讲述DLL库自动注册的两种方法,包括调用Regsvr32方法等.希望通过本文能对大家有所帮助. 尽管MS为我们提供了丰富的.NET Framework库,我们的程序C#开发带来了极大的便利 ...

  8. OCX控件注册相关(检查是否注册,注册,反注册)

      1BOOL RegisterOcx(LPCTSTR OcxFileName)    2{    3 LPCTSTR pszDllName = OcxFileName ; //ActiveX控件的路 ...

  9. VC ActiveX 控件 开发总结

    VC 制作ActiveX 控件(OCX) http://ileson.iteye.com/blog/1002910 1.vc6下建立一下activeX工程     详见http://hi.baidu. ...

最新文章

  1. php登录失败后,php – X尝试失败后阻止登录
  2. supersu二进制更新安装失败_helm安装教程
  3. 关于迪杰斯特拉算法(最短路)的PHP实现
  4. Veeam 发布 2022 年数据保护趋势报告,开发者需关注哪些点?
  5. 移动游戏开发图书推荐
  6. 巨坑:从Sqoop导入MySQL导入TINYINT(1)类型数据到hive(tinyint),数据为null
  7. 申通快递机器人上岗_【峰暴】618, 数万台机器人上岗为您服务!
  8. C# winform+ springboot + mybatis 分页查询
  9. 暴走恭亲王:Jed McCaleb才是中本聪大魔王?
  10. 一招教你如何使用.Net Core 3.0正式版创建Winform程序
  11. DBeaver mysql驱动连接问题
  12. ICPC Central Europe Regional Contest 2019【山东大学】 部分题解
  13. MySQL高级查询语句——超详细,一篇就够了
  14. 修复Linux下NVidia显卡画面撕裂的问题
  15. 腾讯高工保姆级“Java成长手册”,层层递进,全是精华
  16. ResidualCoder
  17. 如何从ZIP文件解压缩文件
  18. 计算机函数if80到90分怎么弄,excel统计80~90分的人数,如何操作?
  19. windows 快速修复内存不能read
  20. echarts环形柱状图

热门文章

  1. Qt中openGL的四个重要事件(initializeGL() resizeGL() paintGL() pdateGL())调用规则
  2. 封装echarts china map geo实现dispatch触发geoSelect事件高亮显示某个省份和城市,并定义复杂样式
  3. push代码到github时,每次都要输入用户名和密码的问题
  4. SYNCHRO 4D可视化调度学习教程 SYNCHRO 4D: Visual Scheduling
  5. 一图带你入门Linux 存储I/O栈
  6. Go 语言实现字符串匹配算法 -- BF(Brute Force) 和 RK(Rabin Karp)
  7. Aveva Marine C# 二次开发入门001
  8. HDU 6229 Wandering Robots 找规律+离散化
  9. 新的sublime text已经上传网盘,地址写在下面
  10. JavaScript学习系列6 充实文档的内容