当前位置: 首页 > 编程日记 > 正文

VC++ OCX 控件注册

转自: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 不能运行。

相关文章:

程序猿生存指南-4 借钱风波

借钱风波&#xff08;10&#xff09;临近春节&#xff0c;我的朋友圈被各个公司的年终奖刷屏。土豪互联网公司有送现金的&#xff0c;有送豪车的&#xff0c;还有送别墅的。它们享受着移动互联网的红利&#xff0c;赚得盆满钵满。不过翻看公司请媒体写的那些报道&#xff0c;就…

赛灵思:人工智能芯片发展方向与误区

演讲嘉宾 | 姚颂&#xff0c;赛灵思人工智能业务资深总监整理 | 夕颜人工智能发展过程中&#xff0c;算力是一个重要的因素&#xff0c;算力就像是 AI 的燃油&#xff0c;没有燃油&#xff0c;AI 哪也去不了。而为 AI 应用提供算力的&#xff0c;正是各种各样的芯片。而近几年&…

Python 多线程抓取网页 牛人 use raw socket implement http request great

Python 多线程抓取网页 - 糖拌咸鱼 - 博客园Python 多线程抓取网页最近&#xff0c;一直在做网络爬虫相关的东西。 看了一下开源C写的larbin爬虫&#xff0c;仔细阅读了里面的设计思想和一些关键技术的实现。1、larbin的URL去重用的很高效的bloom filter算法&#xff1b; 2、DN…

从特斯拉到英伟达,那些端到端自动驾驶研发系统有何不同?

作者 | 黄浴&#xff0c;奇点首席科学家兼总裁来源 | 转载自知乎专栏自动驾驶与视觉感知导读&#xff1a;近日&#xff0c;吴恩达的 Drive.ai 被苹果收购的消息给了自动驾驶领域一记警钟&#xff0c;但这个领域的进展和成果犹在。本文将介绍一些端到端的自动驾驶研发系统&#…

vc6中进行多行注释和反注释的方法

1、利用工具中自带的按钮实现&#xff1a; Tools-->Customize-->Add-ins and Macro Files-->将SAMPLE项选中-->Commands-->Category中选择Macros-->在Commands中将CommentOut拖到工具栏&#xff0c;再选中一个Images&#xff0c;点击OK即可。 这种方法是使…

一看就懂!【英雄联盟锐雯】与 Python 详解设计模式之门面模式

【网络配图】设计模式&#xff08;Design Pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的&#xff1a;为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化&#xff1b;设计模…

无法挂载 NTFS格式的分区:mount: unknown filesystem type ‘ntfs’

问题&#xff1a; # mount –t ntfs /dev/sdb1 /mnt/usb mount: unknown filesystem type ‘ntfs’ 这是由于CentOS release 5.3(Final)上无法识别NTFS格式的分区。解决办法&#xff1a; 通过使用 ntfs-3g 来解决。 打开ntfs-3g的下载点http://w…

vs2008 ActiveX控件测试容器的生成以及调试ActiveX控件

1、ActiveX控件测试容器的生成&#xff1a;用TSTCON生成测试容器 http://msdn.microsoft.com/zh-cn/library/f9adb5t5(vvs.90).aspx 在搜索里搜索tstcon,双击TstCon文件夹&#xff0c;将此文件夹里的东西全部复制到另外一个新的空文件里&#xff0c;然后打开解决方案 tstcon.…

百度自动驾驶新突破:获首批T4牌照,升级Apollo 5.0,将进行复杂城市场景路测...

作者 | KYLE WIGGERS等编译 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;最近&#xff0c;百度自动驾驶项目终于有了进展。先是上周悄然发布了 Apollo 的最新版本 Apollo 5.0&#xff0c;引入一些新功能&#xff1b;昨天下午&#xff0c;北京市自动驾驶测试…

折叠屏就要来了,适配逼死 Android 开发?

1. 异型屏还没适配好&#xff0c;折叠屏就要来了&#xff0c;Android 的碎片化&#xff0c;让开发者又多掉了不少头发。 北京时间 11 月 8 日&#xff0c;三星在旧金山向开发者发布了一款可折叠屏幕手机。并表示&#xff0c;新技术需要开发者调整其 App&#xff0c;以确保在手机…

nginx虚拟目录配置

2019独角兽企业重金招聘Python工程师标准>>> 今天搞了N久的虚拟目录配置&#xff0c;在几乎要放弃的时侯偶然看到一篇文章&#xff0c;将我的问题搞定 原贴地址&#xff1a;http://blog.sina.com.cn/s/blog_6c2e6f1f0100l92h.html 我的需求是这样的&#xff0c;系…

阿里达摩院刷新纪录,开放域问答成绩比肩人类水平,超微软、Facebook

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;近日&#xff0c;由阿里巴巴达摩院语言技术实验室研发的 Multi-Doc Enriched BERT 模型在微软的 MS MARCO 数 据评测任务&#xff0c;Passage Retrieval Task&#xff08;文档检索排序&#xff09;和 Q&A Task&…

解决windows7下vs2008不能正常编译ActiveX控件的问题

在windows7系统中&#xff0c;vs2008环境下用MFC ActiveX Control生成的控件不能正常编译&#xff0c;但是在xp系统中却能正常编译&#xff0c;解决方法&#xff1a; 1、在windows7中编译&#xff0c;提示错误为&#xff1a;fatal error LNK1000: Internal error during IncrB…

什么是shell【TLCL】

常用命令 datecaldf——report file system disk space usagefree——display amount of free and used memory in the systemexit——退出终端Ctrl-Alt-F1 到 Ctrl-Alt-F6 访问后台终端会话&#xff0c;AltF7返回图形桌面转载于:https://www.cnblogs.com/songdechiu/p/9943599…

Linux终端的几个常用快捷方式,记下!

一、初识linux的终端种类&#xff1a;本地、远程    查看本终端命令&#xff1a;     #tty 命令&#xff0c;看到当前所处的终端     #&#xff08;w&#xff09;who 命令&#xff0c;看到系统中所有登录的用户 其中&#xff0c;tty 终端为表示在本地命令行模式下打开…

从0到1 | 文本挖掘的传统与深度学习算法

一、什么是文本挖掘&#xff1f;讨论文本挖掘之前&#xff0c;我们要先说一下数据挖掘的概念&#xff0c;因为文本挖掘是数据挖掘的一个分支。数据挖掘&#xff08;Data Mining&#xff09;指从大量的数据中通过算法搜索隐藏在其中信息的过程。而文本挖掘就是从文本数据中获取有…

window7系统中64位安装matalbR2009b后出现乱码的解决方案

转自&#xff1a;http://blog.csdn.net/shaoguangleo/archive/2010/11/29/6042194.aspx MATLAB 中默认的字体是 Monospaced &#xff08;即等宽字体&#xff09;&#xff0c;这是一种非常适合用于显示程序源代码的字体。但Monospaced 是种逻辑字体&#xff0c;它在不同语言和操…

【电路】pmic芯片设计细节

VIO_IN供电https://e2e.ti.com/support/power-management/f/196/t/712146?tisearche2e-sitesearch&keymatchtps65916 Note that every GPIO will be configured as an input for the first 6ms after VCC is supplied, which is the time it takes for the device to init…

sql server 的一些记录

下面记录一些用到sql server查询时候用到的函数。 charindex,在一个表达式中搜索另一个表达式并返回其起始位置&#xff08;如果找到&#xff09;。http://msdn.microsoft.com/zh-cn/library/ms186323.aspx CHARINDEX ( expressionToFind ,expressionToSearch [ , start_locati…

[WPF] UserControl vs CustomControl

原文:[WPF] UserControl vs CustomControl介绍 WPF中有两种控件&#xff1a;UserControl和CustomControl&#xff0c;但是这两者有什么区别呢&#xff1f;这篇博客中将介绍两者之间的区别&#xff0c;这样可以在项目中合理的使用它们。 UserControl 将多个WPF控件(例如&#xf…

50行Python代码,获取公众号全部文章

作者 | 胖虎转载自Python3X&#xff08;ID: python3xxx &#xff09;爬取公众号的方式常见的有两种&#xff1a;通过搜狗搜索去获取&#xff0c;缺点是只能获取最新的十条推送文章。通过微信公众号的素材管理&#xff0c;获取公众号文章。缺点是需要申请自己的公众号。今天介绍…

解决Windows7下vs2008 Active control test container 不能运行的问题

按照&#xff1a;http://blog.csdn.net/fengbingchun/archive/2011/05/05/6398356.aspx 在windows7系统中&#xff0c;vs2008环境下用MFC ActiveX Control生成的控件不能正常编译&#xff0c;但是在xp系统中却能正常编译&#xff0c;解决方法&#xff1a; 1、在windows7中编译…

入门必备 | 一文读懂神经架构搜索

作者 | Md Ashiqur Rahman编译 | 刘静转载自图灵TOPIA&#xff08;ID: turingtopia&#xff09;近期谷歌大脑团队发布了一项新研究&#xff1a;只靠神经网络架构搜索出的网络&#xff0c;不训练&#xff0c;不调参&#xff0c;就能直接执行任务。这样的网络叫做WANN&#xff0c…

脚本化 tmux — LinuxTOY

脚本化 tmux — LinuxTOY脚本化 tmux2012-07-02 Toy Posted in TipsRSS昨天我在家试了下脚本化 tmux&#xff0c;其表现相当令人满意&#xff0c;只需稍加定制便可满足各种实际需要。这或许可以成为抛弃 GNU screen&#xff0c;改用 tmux 的又一个理由。该脚本先判断一个名为 c…

OpenCV像素点处理

转自&#xff1a;http://blog.csdn.net/hxgqh/archive/2011/02/23/6202001.aspx 获得像素点的值便可以更加灵活的进行图像处理&#xff0c;在OpenCV里可以通过cvGet2D()和cvSet2D()两个函数加上一个CvScalar结构体做到。OpenCV中&#xff0c;CvScalar结构为&#xff1a;typedef…

亲 , Zookeeper了解一下 : 概述

2019独角兽企业重金招聘Python工程师标准>>> 在学习的过程中,我们总需要一个来自灵魂的拷问: 为什么? 为什么会产生Zookeeper 这个问题有深度,那要从五百万年说起,在遥远的塞伯坦星球..... 扯远了... 在遥远在单机单服务的时代 , 想要扩展服务 , 只能增加硬件配置 …

wordpress jquery加载如何实现?

2019独角兽企业重金招聘Python工程师标准>>> 为什么写这篇文章&#xff1f; 因为之前在wordpress里面用jquery的时候没注意&#xff0c;这次因为要优化网站把没用的插件删了&#xff0c;结果发现有的jquery功能失效了&#xff0c;调试了许久才发现可能是jQuery没有定…

百度与华为重磅合作!李彦宏:技术是百度的信仰

导语&#xff1a;这是百度第三年举办AI开发者大会。一生二&#xff0c;二生三&#xff0c;三生万物。AI虽然不能产生万物&#xff0c;但是正在“唤醒万物”。 作者 | 阿司匹林 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 在今天上午举行的的百度AI开发者大…

已知空间一点到另外两点直线的距离

转自&#xff1a;http://www.cnblogs.com/clarkustb/archive/2008/11/04/1326500.html 已知空间一点到另外两点直线的距离设空间中的三点为M1,M2,M3,分别用矢量a,b表示方向向量M1M2和M1M3,则&#xff1a; 1. M3到M1,M2连线的距离为|axb|/|a|&#xff0c;这里|.|表示向量的…

vue---进行post和get请求

参考文档&#xff1a; https://www.jb51.net/article/125717.htm 使用axios <script src"https://unpkg.com/axios/dist/axios.min.js"></script> 基本使用方法&#xff1a; get请求&#xff1a; // Make a request for a user with a given ID axios.ge…