注册ActiveX控件的几种方法

2023-11-19

使用ActiveX控件可快速实现小型的组件重用、代码共享,从而提高编程效率,降低开发成本。但是ActiveX控件对于最终用户并不能直接使用,因为ActiveX控件必须先在Windows中注册。注册ActiveX控件一般来说有六种途径,它们有各自的优点,运用范围也不同。

  Regsvr32.exe注册

  Regsvr32.exe位于Windows目录的system子目录下。点击Windows的“开始→运行”菜单,在对话框中输入以下命令:

  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控件虽然简单,但需要用户手工进行注册,在不用时还需手工解除注册。

  VFP环境注册

  在我们进行程序设计时,VFP本身提供一个注册ActiveX控件的方法。

  进入VFP环境,选择“工具→选项”菜单,点击“控件”页,选中“ActiveX控件”单选按钮,在列表框里显示所有已经注册的ActiveX控件,这时,点击右边的“添加”按钮,选择需要注册的ActiveX控件文件,“确定”后完成注册。也可以在表单设计器的表单控件工具栏里拖动“OLE”按钮到表单,在弹出的选择框里选中“插入控件”单选钮,同样点击右边的“添加控件”按钮,来完成新控件的注册。

  卧龙传说提醒:本方法仅适合程序员在设计程序过程中手工进行,对用户而言,并没有实现在本地机上自动注册。

  安装程序注册

  大型应用软件一般都有一个安装程序,在安装程序中解决ActiveX控件的注册是较为理想的一种方案。

  在用户执行安装程序时,这些ActiveX控件将自动在用户机器上安装并注册。

  VFP7.0光盘所带的InstallShield是目前较为流行的制作安装程序的工具,使用它可以制作出专业级的Setup安装程序,还可以注册应用程序使用到的ActiveX控件。而且,在以后使用控制面板的“添加/删除程序”卸载该软件时,安装程序会自动注销掉以前注册的ActiveX控件。

  加入代码注册

  首先,定义一个注册控件的函数:

  Function MyRegsvr ( lpcRegFilename, lplIsreg )

  If File(lpcRegFilename)

  lpcRegFilename = iif(llisreg, lpcRegFilename, [ /u ] + lpcRegFilename)

  Run /n regsvr32 &&lpcRegFilename

  Endif

  Return

  Endfunc

  然后就可以通过以下语句来调用该函数,并完成ActiveX控件的注册了(卧龙传说提醒:一定要注意控件文件的路径哦)。

  = MyRegsvr( "netshare.ocx", .T.) &&注册netshare.ocx控件

  = MyRegsvr( "netshare.ocx", .F.) &&解除netshare.ocx控件的注册

  注册函数注册

  上面提到运行regsvr32.exe应用程序将弹出注册是否成功的对话框,注意看内容“DllRegisterServer in netshare.ocx succeeded”或“UnDllregisterServer...”,其实,通常每个可用的ActiveX控件都有DllRegisterServer、UnDllregisterServer这两个自注册函数包含在其中,我们可以用定义API函数的方法(Declare <函数名> in <文件名> ... )来定义它,然后直接使用该函数来进行注册和反注册。

  同样,我们先自定义一个注册函数(卧龙传说提醒:请注意DllRegisterServer、UnDllregisterServer的大小写):

  Function DllRegister (lpLibFileName,isReg)

  isReg = iif(type("isReg")="U", .T., isReg)

  lpProcName = iif(isReg, "DllRegisterServer", "DllUnregisterServer" )

  Declare INTEGER (lpProcName) in (lpLibFileName)

  return &&lpProcName.()

  Endfunc

  然后,就可以通过该函数来完成ActiveX控件的注册了。

  = DllRegister( "netshare.ocx", .T.) &&注册,返回0表示成功

  = DllRegister( "netshare.ocx", .F.) &&注销,返回0表示成功

  Clear Dlls

  试试,是不是没有了弹出框的烦恼!

  卧龙传说提醒:该方法没有对ActiveX控件文件的验证,假如该控件没有有效的DllRegisterServer功能(即不具有自注册功能),也就找不到以上的两个API函数,照样会有错误信息弹出。

  API函数注册

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

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

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

  3、使用CallWindowProc函数执行已载入内存的ActiveX控件注册函数(DllRegisterServer、UnDllregisterServer)。

  上面所述的ActiveX控件注册方法各有特点。经实际使用,效果良好。您可根据实际情况灵活选用。




   

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

注册ActiveX控件的几种方法 的相关文章

  • winform中的activex

    我需要在我的 Net WinForm 中放入一些activeX 提供商向我发送了 tlb 和 com dll 这够了吗 怎么把它放到winform上呢 这应该足够了 您需要在计算机上注册该 dll 将其添加到 dev studio 工具箱
  • 在 CAB 中部署 C# ActiveX 以供 Internet Explorer 使用

    我正在拼命尝试部署一个用 C 开发的 IE 的 ActiveX 作为 CAB 存档 我阅读了很多资源 其中一些来自 StackOverflow 似乎很多人都遇到了同样的问题 我尝试了 3 种解决方案 a 创建 CAB VS 项目 b 使用手
  • 从序列化数据创建数字人物指纹模板

    这是一个非常具体的问题 可能会让我获得风滚草徽章 但如果可以的话请回答 我已经将 DigitalPersona sdk dll 作为类型库导入到 Delphi 中 并尝试验证我作为序列化数据存储在数据库中的指纹 它工作得非常好 注册似乎工作
  • Delphi - 线程不以 ActiveX 形式执行 - 但在其他地方执行

    我有一个线程 称为 TAlertThread 线程通过触发事件与其所有者进行交互 例如 当线程内某些数据可用时 它会设置一些临时变量并调用 Synchronize UpdateAlert 后者又会触发相应的事件 现在该线程可以在任何标准 W
  • 如何将 MFC ActiveX 控件添加到现有的 ActiveX 项目

    在 Visual Studio 2008 中 我可以创建一个 MFC ActiveX 项目 它提供了一个创建单个 ActiveX 控件的向导 我现在想在这个项目中创建新的控件 我找不到任何方法来做到这一点 我刚刚发现生成 ActiveX 控
  • 来自java应用程序的Activex?

    是否可以在Java应用程序中轻松嵌入ActiveX控件 这值得么 在我的下一个项目中 我应该在 Java 应用程序中使用现有的 activex 或者必须从头开始重新实现所有内容 所以我想知道什么会减少麻烦 我认为如果不借助第三方库就没有办法
  • COM DLL 和 ActiveX 控件之间的区别

    我知道的相似之处很少 两者都无法自行执行 它需要一些程序来实例化它 COM DLL 和ActiveX 控件是独立于平台的 是这样吗 两者都需要支持接口IUnknown并公开了三个方法QueryInterface AddRef and Rel
  • 如何在 Web 浏览器控件内自动启用 ActiveX 元素

    我的 WPF 应用程序中有一个 WebBrowser 控件 当我现在加载将显示 swf 文件的本地 html 文件时 它可以工作 但只有在我接受 ActiveX 警告之后 是否可以更改 WebBrowser 控件的选项以自动启用 Activ
  • VBA 中运行时错误 429,但类已注册

    我正在尝试重新创建一个程序 该程序使用 JavaScript 打开与 PLC 的连接 然后在网页上显示各种信息 由于各种原因 我宁愿将其以 MS Access 的形式保存 并且一直在努力寻找合适的 dll 来使用 Jet32X dll 如果
  • 解决错误 MSB8011:无法注册输出

    一个奇怪的错误 错误 MSB8011 无法注册输出 请尝试启用每用户 从命令提示符重定向或注册组件 提升的权限 C 程序 文件 MSBuild Microsoft Cpp v4 0 Microsoft CppCommon targets 7
  • AxInterop 和 Interop 有什么区别?

    我已将 ocx 添加到 VS 的工具箱中 创建了两个 dll Interop NNN dll AxInterop NNN dll 每一个是什么 两者都需要吗 Interop xxx dll 和 AxInterop xxx dll 分别是引用
  • 是否有 x64 版本的 MsStkPrp.dll

    我正在将 ATL 控件移植到 64 位 该控件在其属性对话框中使用 Stock 属性页 CLSID StockFontPage CLSID StockColorPage 针对 x64 重新编译后 颜色 和 字体 选项卡丢失 因为 MsStk
  • Ajax 调用在 IE 中不起作用,除非您修改安全设置

    IE 有时很糟糕 直到 IE 10 IE 才提供对 XMLHttpRequest 对象的支持 相反 您必须使用 XActiveXObject 对象来运行 AJAX 调用 JQuery 默认启动该对象 并在三元函数中维护它 如果它存在 本质上
  • 将 ActiveX Com 组件与 Node.js 一起使用。是否可以

    有没有办法将任何ActiveX com组件与nodejs一起使用 实际上 我永远不需要这个 但我在 Windows 上运行 nodejs 并尝试发送 ping 请求而不分叉新进程 Windows 不存在这样的模块 由于存在一些 Active
  • 如何防止在 ActiveX 方法调用期间重新进入 WPF 事件处理程序?

    我们从 WPF 和 STA 应用程序中调用 ActiveX 组件上的方法 此调用是通过以下方式后期绑定执行的 res ocx GetType InvokeMember methodName flags null ocx args 其中 oc
  • 寻找示例项目和“如何创建”VB6 Activex EXE

    我正在学习如何创建 VB6 Active X EXE 我需要为许多 VB6 应用程序添加 打电话回家 到服务器的功能 我想集中此功能 但不想使用 DLL 来实现 因为我只想需要防火墙权限one程序 phone home ActiveX EX
  • 在 Excel 中打印 MATLAB 图窗并调整其大小

    我在 MATLAB 中有两个带有手柄的图形hFig1 and hFig2 我想将它们打印到 Excel 中的特定单元格 单元格 E3 和 I3 并将它们重新调整为 2 英寸 x 3 英寸 我尝试过使用 AddPictures对象处理程序和使
  • Windows 更新后 Excel 2010 ActiveX 控件不再工作 [重复]

    这个问题在这里已经有答案了 因此 在工作中 我在安装了最新的 Windows 7 更新 包括 Microsoft Office 2010 更新 后遇到了这个问题 更新的日期是今天 2014 年 12 月 12 日 更新后 我在 Excel
  • 如何在 IE9 中检测用户禁用了某个加载项?

    IE9 用户可以通过单击齿轮按钮并选择 管理加载项 来禁用加载项 例如浏览器帮助程序对象 我需要使用 JavaScript 检测给定的附加组件是否已以这种方式被禁用 我似乎无法找到错误处理程序的方法
  • 在 C# WinForms 中预览文档(Word、Excel、PDF、文本文件等)?

    我正在开发一个 C WinForms 应用程序 我希望能够 预览 其中的各种文档类型 也就是说 当用户从列表中选择文件名时 它会在下面以相同的形式显示所选文件的预览 这很像 Outlook 允许您无需双击即可预览选定邮件的方式 有没有什么方

随机推荐

  • 作为技术岗位面试官的一些分享

    我在过去的四年里参与了很多公司技术岗位的面试 说实话要看出一个人的综合素质 我还真的做不到 至于其他面试官是否可以 我也不得而知 但我个人感悟是 在面试过程中 面试官更加多的是去匹配和比较 在招聘过程中 企业会根据人力需求先制定出一套招聘需
  • 软件测试中需要使用的工具

    作为一个测试人员在日常工作中会使用到很多的工具 今天给大家分享一下这些工具 对软件测试 接口 自动化 性能测试和日常文档编写办公有帮助的网站 接口测试大力推荐国产的接口测试工具 apipost apipost还是一款很不错的接口文档生产工具
  • 轻量化CICD平台建设

    一 需求 想组合一套cicd流程 但是又不想用gitlab jenkins那么重 首先说一下我的硬件条件 一台群晖920 两块4T的红盘 20G内存 一台华硕tuf的路由器 有联通给的动态外网ip 在路由器做了ddns 再说一下软件条件 d
  • SpringBoot启动时初始化资源的几种方法

    SpringBoot提供了多种方法可实现在启动过程中初始化资源 使用注解 PostConstruct 实现InitializingBean接口 实现CommandLineRunner接口 实现ApplicationRunner接口 监听Sp
  • STM32F103实验定时器

    目录 本文 在上一章的基础上 将介绍如下内容 定时器 上一篇 STM32F103实验外部中断和独立看门狗 https blog csdn net qq 40318498 article details 95980287 正文 STM32F1
  • 利用电影直播赚钱的方法(几乎零成本、很多人不知道)

    每天都有人为了找好项目发愁 什么是大家理解的好项目 上来什么都不做就赚钱吗 边玩边赚钱吗 互联网确实有太多赚钱的项目 但是都是需要前期的积累和沉淀 你熬过去了吗 很多人看着别人后面躺赚的潇洒 觉得好后悔 可以当初自己做了吗 别人付出的时候自
  • 升级Struts2.5后使用DMI动态方法调用遇到问题

    转自 http www lvhongqiang com blog429 html 问题 升级Struts2 5后使用DMI动态方法调用报错 method 找不到 源码 struts xml
  • std:forward 完美转发

    概述 TEMPLATE CLASS identity template
  • leetcode214. 最短回文串

    给定一个字符串 s 你可以通过在字符串前面添加字符将其转换为回文串 找到并返回可以用这种方式转换的最短回文串 示例 1 输入 s aacecaaa 输出 aaacecaaa 示例 2 输入 s abcd 输出 dcbabcd 提示 0 lt
  • Linux脚本- 执行当前文件下前500个.c文件,并将每个文件对应的执行结果重定向到同名的.ok文件中

    需求 执行当前文件下前500个 c文件 并将每个文件对应的执行结果重定向到同名的 ok文件中 以下是一个用于实现该功能的 Bash 脚本 bin bash 计数器 用于限制处理的文件数量 counter 0 遍历当前目录下的所有 c 文件
  • ChatGPT到底怎么用?

    ChatGPT简介 ChatGPT Chat Generative Pre trained Transformer 全称为生成型预训练变换模型 由美国 OpenAI团队研发 现如今的ChatGPT不仅可以根据聊天上下文进行交互 还可以进行文
  • nodejs之express(二)get和post请求

    获取请求中的参数 nodejs的 express框架 提供了四种方法来实现 req body 解析body不是nodejs默认提供的 需要载入body parser中间件才可以使用req body 此方法通常用来解析POST请求中的数据 2
  • Hadoop3.1.3 集群环境搭建

    Hadoop3 1 3 集群环境搭建 1 集群环境配置 主机名 HDFS YARN IP地址 说明 hadoop0 DataNode NameNode NodeManager 192 168 108 10 主节点 master hadoop
  • 在Ubuntu 18.04系统上安装Jenkins

    该教程只介绍如何在Ubuntu系统上安装Jenkins 想要了解的更多 请访问Jenkins官方安装教程 一 系统要求 最低推荐配置 256MB可用内存 1GB可用磁盘空间 作为一个Docker容器运行jenkins的话推荐10GB 为小团
  • xe7 安装chrome组件(CEF4Delphi)

    缘起 大屏项目需要用到chrome组件 但为了实现firemonkey的矢量和强大的图形功能 所以只能重新在xe7中安装chrome组件 碰到了一些问题 都一 一化解了 将整个过程记录下来 以供大家采用 1 下载CEF4Delphi mas
  • 第5节 实现Callable 接口

    Java 5 0 在java util concurrent 提供了一个新的创建执行 线程的方式 Callable 接口 Callable 接口类似于Runnable 两者都是为那些其实例可能被另一个线程执行的类设计的 但是 Runnabl
  • 阿里代码规范检查工具的安装使用

    阿里巴巴于 10 月 14 日在杭州云栖大会上 正式发布众所期待的 阿里巴巴 Java 开发规约 扫描插件 简单了解一下这插件 该插件由阿里巴巴 P3C 项目组研发 代码已经开源 GitHub https github com alibab
  • 【python】emoji库,增添趣味!

    今天说一下python的外置库emoji 里面提供超多表情使用 一 安装环境 emoji库使用pip接口进行安装 pip install emoji 二 了解下emoji库函数的使用 两个主要用的函数 emoji emojize 根据 co
  • python网络通信时出现乱码_解决Python发送Http请求时,中文乱码的问题

    解决方法 先encode再quote 原理 msg encode utf 8 是解决中文乱码问题 quote 假如URL的 name 或者 value 值中有 或者 等符号 就会有问题 所以URL中的参数字符串也需要把 等符号进行编码 qu
  • 注册ActiveX控件的几种方法

    使用ActiveX控件可快速实现小型的组件重用 代码共享 从而提高编程效率 降低开发成本 但是ActiveX控件对于最终用户并不能直接使用 因为ActiveX控件必须先在Windows中注册 注册ActiveX控件一般来说有六种途径 它们有