C# (VS)实现多个DLL(OCX)控件注册的方法

C#中调用OCX控件 调用OCX控件的步骤: 1、在系统中注册该ocx控件,命令:regsvr32.exe 控件位置(加 /u 参数是取消注册) 2、在.net的工具箱中添加该控件,拖到form中去就可以了。 不用工具箱的话,自己手工添加,需要注意一个问题,就是要用Aximp.exe来包装一下ocx控件的类,然后再程序中引用生成的dll就可以了。 aximp [options]{file.dll | file. 阅读详情

当利用VS2010制作安装包时,可能会遇到有多个DLL(OCX)控件需要注册的情况,此时采用bat的批处理命令的方式进行注册不够方便,在C#中有两种方法:

1、利用System.Diagnostics调用Regsvr32.exe进行注册

2、调用DllRegisterServer函数法

推荐采用第二种方法,当需要注册多个控件时,如下:

        #region 注册控件声明

        [DllImport(@"C:\Windows\System32\TeeChart8.ocx", EntryPoint = "DllRegisterServer")]
       public static extern int DllRegisterServer_TeeChart8();
       [DllImport(@"C:\Windows\System32\mscomct2.ocx", EntryPoint = "DllRegisterServer")]
       public static extern int DllRegisterServer_mscomct2();

       #endregion

       
       int i1 = DllRegisterServer_TeeChart8();
       if (i1 >= 0)
       {
           //MessageBox.Show("DllRegisterServer_TeeChart8 success");
       }
       else
       {
           MessageBox.Show("DllRegisterServer_TeeChart8 error");
       }
       int i2 = DllRegisterServer_mscomct2();
       if (i2 >= 0)
       {
           //MessageBox.Show("DllRegisterServer_mscomct2 success");
       }
       else
       {
           //MessageBox.Show("DllRegisterServer_mscomct2 error");
       }
// 此处没有判断控件是否已注册和取消控件注册。

 

以下附转载的C#自动实现DLL(OCX)控件注册的方法(详细说明单个控件注册的方法):

尽管MS为我们提供了丰富的.NET Framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写。当需要用到Dll引用的时候,我们通常会通过“添加引用”的方式将它们纳入到项目中,然后就可以像使用自己的类一样方便的使用它们了。但是,有些Dll库(OCX)文件是需要注册到Windows注册表后才能正常添加和使用的。本文介绍两种为Dll库(OCX)自动注册的方法,为大家提供参考。

  首先,大家都知道在Windows的“运行”中,输入“Regsvr32.exe 路径”这样的方法来手动注册Dll控件(OCX),显示这种方法对于程序的自动化部署等带来极大的不便,因此,今天我们着重介绍如何用C#实现自动注册。

  方法一:调用Regsvr32法

  既然可以在运行栏中输入“Regsvr32.exe 路径”的方法来注册,那么,一定可以在C#程序中采用同样的方法来调用Regsvr32,以实现注册:

Process p = new Process(); p.StartInfo.FileName ="Regsvr32.exe"; p.StartInfo.Arguments ="/s C:\\DllTest.dll";//

  路径中不能有空格 p.Start(); 采用这种方法,注意要添加对命名空间System.Diagnostics的引用:

  using System.Diagnostics; 另外,这种方法有一个不足之处,那就是注册工作是在本程序之外由Regsvr32.exe程序来完成的,系统内不方便知道注册的结果,也不方便对注册过程弹出的对话框进行自定义和控制。这里附Regsvr32的参数说明:(感谢网友伍华聪的提醒)

  regsvr32.exe是32位系统下使用的DLL注册和反注册工具,使用它必须通过命令行的方式使用,格式是:

  regsvr32 [/u] [/s] [/n] [/i[:cmdline]] DLL文件名

  命令可以在“开始→运行”的文本框中,也可以事先在bat批处理文档中编写好命令。未带任何参数是注册DLL文件功能,其它参数对应功能如下:

/u:反注册DLL文件;

  /s:安静模式(Silent)执行命令,即在成功注册/反注册DLL文件前提下不显示结果提示框。

  /c:控制端口;

  /i:在使用/u反注册时调用DllInstall;

  /n:不调用DllRegisterServer,必须与/i连用。

  方法二:调用DllRegisterServer函数法

  既然方法一不大实用,那么我们就来寻找一种真正实用的方法来达到我们的目的吧。研究Regsvr32.exe和Dll文件,我们会发现,其实每个需要注册的文件都包括一个DllRegisterServer()方法,Regsvr32.exe就是通过调用该方法来完成Dll的注册的。呵呵,知道了这个,我们就可以自己调用DllRegisterServer()来完成注册过程啦。

  首先,还得引入外部方法:

[DllImport("DllTest.dll")]publicstatic externint DllRegisterServer();//注册时用 [DllImport("DllTest.dll")] public static extern int DllUnregisterServer();//

 

  取消注册时用 接下来就不难啦:

int i = DllRegisterServer();if (i >= 0) { //注册成功! } else { //注册失败}

取消注册的过程就不应再贴代码啦。

  两种方法介绍完啦,可是好像还缺点什么?对了,那就是对Dll是否已经注册过了的判断。一般情况下,我们可以将对Dll控件的注册过程放在系统启动的过程中来完成,但是,总不能每次启动都注册一次吧?这样做显然不合理。那么,我们就来判断一下,当前Dll是否已经注册过,如果已注册过,就跳过注册过程。

  每一个Dll的注册都会在注册表里记录下有关它本身的资料,如注册路径,唯一ID等。我们这里就是利用它留下的唯一ID号来判断:

   

RegistryKey rkTest = Registry.ClassesRoot.OpenSubKey("CLSID\\{7713F78A-44DE-42BA-A1F6-3FB0BD6CA63B}\\");if (rkTest == null){ //Dll没有注册,在这里调用DllRegisterServer()吧}

注意要添加对命名空间Microsoft.Win32的引用:

using Microsoft.Win32;

    其中的“{7713F78A-44DE-42BA-A1F6-3FB0BD6CA63B}”就是该Dll的唯一ID啦,每一个Dll文件都会不一样的。但是,问题又来了,怎么样知道它的唯一ID呢?其实很简单,那就是“逆向思维”。我们可先注册这个Dll文件,然后到注册表的“HKEY_CLASSES_ROOT\CLSID”分支下“查找”Dll的名称或路径,就可以看到这个ID啦。简单我就不多说啦。

 

C#中不能添加进工具箱的ocx界面控件解决办法 有些带界面的ocx组件, 你手动注册后,并不能在vs2022中添加到工具箱, 那么也就意味着你不能拖拽来使用这个ocx控件, 那么只能手动撸代码添加了.过程也简单, 下面是我测试使用的步骤:需要先把ocx组件给生成vs中能用的类 , 利用vs自带的 Aximp.exe 来生成步骤: 在vs中选择[工具]->[命令行]->[开发者命令提示] 阅读详情

相关推荐

VS2022中手动集成OCX控件的实战指南:从注册到代码调用

本文提供了在Visual Studio 2022中手动集成OCX控件的完整实战指南。针对控件无法在工具箱显示的问题,详细讲解了从使用regsvr32命令或C#代码注册OCX,到利用Aximp工具生成.NET包装类,最后通过动态创建和代码调用将控件集成到C# WinForms项目的全流程,并附带了处理事件、资源清理及常见错误的解决方案。

weixin_29214559的博客 396

C#调用C代码生成的DLL的DLLImport方式

C#代码需要调用C开发的动态库时,可以使用DLLImport的方式。 通过来指定调用的dll及其路径,调用规范和entery point,通常这个新定义的函数和DLL中的函数同名,如果遇到传入数组形式如double *,C#使用double[]代替,如果传入指针类型用于返回参数,如point to int,则在C#中使用ref int形式。有时代码会报出"Entry Point not found"错误,这可能是DLL生成时没有extern C造成。

小飞将的博客 1135

Active X控件的ocx文件转化为C#可用的dll文件

编译环境:VS2015 1、以管理员的身份打开VS的cmd窗口,我是从电脑->文件打开的,如下图所示:

weixin_46028195的博客 1067

VS 自带DLL注册工具注册Dll

点击  开始\所有程序\Microsoft Visual Studio 2008\Visual Studio Tools  以管理员身份运行Visual Studio 2008 Command Prompt。 //注册Dll 在Visual Studio 2008 Command Prompt 键入 E:\>regasm mydll.dll . eg:E:\>regasm E:\Assig

WJSnowEagle的专栏 2508

VS2022工具箱不显示OCX控件?5分钟搞定手动注册与代码添加

本文针对VS2022中OCX控件无法在工具箱显示的问题,提供了深度解决方案。文章剖析了64位设计器与32位OCX的兼容性根源,并详细指导开发者通过手动注册验证依赖,以及使用Aximp工具生成互操作程序集,最终通过C#代码动态加载控件,实现稳定集成。

defi6farmer的博客 736

C#开发OCX控件,已经ASP.net调用OCX

VS2010程序,有两个程序,一个是如何创建OCX控件,一个是如何在ASP.NET中调用ocx, 适合初学者学习。

C# 程序兼容同一个dll的不同版本

当程序多个dll引用同一个dll的不同版本时,程序启动会报错,此时需要在启动程序集的App.config下增加以下配置。

Jessyzhao_0的博客 1596

避坑指南:MTK平台Widevine L1密钥安装全流程详解(含SP META工具使用与Log分析)

本文详细解析了MTK平台实现Widevine L1认证的全流程,涵盖密钥申请、格式转换、安全烧录等关键步骤,特别针对Trustonic TEE环境下的SP META工具使用与日志分析提供实用指南。帮助开发者规避常见错误,确保DRM密钥安全部署,满足高端内容保护需求。

weixin_27219587的博客 476

C# 引用同一个dll不同版本的程序集

1.如果已经先引入了newtonsoft.json 12.0.0.0版本的程序集,如果直接引入另一个版本的程序集的话会提示不成功,所以先将另一个版本的程序集改名为newtonsoftv2.json,这样两个程序集都添加到了引用里边。我要引用的文件是newtonsoft.json.dll 两个版本为12.0.0.0 和4.0.0.0。因为项目需要所以必须在项目中引用不同版本的同一程序集。2.然后在引用里边改变程序集的别名,如图。2.在web.config中配置。

xuexixuexien的博客 2667

三维旋转详细解读(Rodrigues‘ Roatation Formula 罗德里格旋转公式)

三维旋转引言三维旋转1)欧拉角2)轴角式旋转分解1)V||的旋转2)V⊥的旋转3)V的整体旋转 引言 前面我们了解了 复数在二维旋转中的作用与联系 而四元数与三维旋转之间的关系与复数对二维旋转有很多类似的地方,下面我们就先来详细了解一下三维旋转的过程。 三维旋转 首先讨论一下三维旋转,我们了解到常用的三维旋转有两种方式: 1)欧拉角 即按照一定的顺序,分别对X, Y, Z三个轴进行旋转 θ 角。绕各旋转轴的旋转矩阵为: 然后任意的三维旋转可以分解成上述三种旋转方式的组合。(注意:三个旋转的顺序是非常重要的

晓晨的博客 1万+

奥比中光Gemini335L SDK实战:从标定参数到3D点云转换

本文详细介绍了奥比中光Gemini 335L深度相机的SDK实战应用,重点讲解如何跳过繁琐的棋盘格标定,直接调用出厂预标定参数实现高效的3D点云转换。通过解析内参、外参获取及四种核心坐标转换模式,并结合OpenCV等工具,指导开发者快速将相机集成到机器人抓取、三维测量等项目中,实现开箱即用的3D视觉解决方案。

raspberrypi5的博客 639

C#调用OCX控件的常用方法[转]

   小伙伴们在使用ICP提供的各种能力进行集成开发时常常会遇到一些技术上的困扰,例如ICP中很多接口是通过OCX控件的方式提供的,如何调用这些接口,就成了一个不大不小的问题,毕竟开发指南上可没这些内容啊~别着急,今天我就给大家介绍一下C#中调用OCX接口的常用方法。^_^y 原文链接 http://developer.huawei.com/ict/forum/thread-21687.html...

new_smile的专栏 3672

智能车竞赛新手必看:单车定向组直线竞速与八字慢速实战技巧

本文为智能车竞赛新手提供单车定向组直线竞速与八字慢速的实战技巧,涵盖赛道分析、动力调校、传感器配置等关键环节。通过真实案例和代码示例,详细讲解如何平衡速度与稳定性,帮助选手避免常见失误,提升比赛成绩。特别针对智能车竞赛中的直线竞速和八字慢速项目,提供从硬件选型到临场策略的全方位指导。

weixin_28718793的博客 434

C#调用第三方ocx控件 (winform /aspx)

C#调用第三方ocx控件 1、.net环境在工具箱上点右键,选择自定义工具箱,然后选择你需要的COM或者OCX控件就可以了。 2、在自定义工具箱中加入相应的控件,设置id,在客户端脚本中直接引用它的ID应可以了,ocx不能作为服务器端使用。 3、不能在asp.net服务端调用ocx, 只能是调用标准的com组件;给你的ocx做一个证书, 捆绑成.cab文件, ...

weixin_30788731的博客 995

社交媒体文章内容与评论抓取:Python 爬虫实战教程

通过本文的介绍,我们学习了如何使用 Python 编写爬虫,抓取社交媒体平台的文章内容和评论。我们详细介绍了如何使用requestsSelenium和Tweepy等工具,抓取微博和 Twitter 上的公开数据。同时,我们还讨论了如何处理反爬虫机制,避免账号或 IP 被封禁。抓取社交媒体数据是一个充满挑战和乐趣的过程,掌握这些技术后,你可以在大数据分析、情感分析和舆情监测等方面得到更深层次的应用。

2201_76125261的博客 1710

JAVA:Spring Boot 集成 Baidu UID-Generator ID 生成器

百度UID-Generator是一款高性能分布式ID生成器,支持600万QPS,提供Snowflake扩展版和Cache模式两种实现方式。文章详细介绍了如何在Spring Boot项目中集成该组件,包括Maven依赖配置、MySQL表结构初始化、Spring Boot数据源配置、WorkerId分配策略实现以及UID生成器的核心配置。该方案具有无中心依赖、ID单调递增、支持集群部署等特点,适用于订单号、用户ID等分布式场景。通过缓存模式(Cache-Buffer)可进一步提升性能,满足高并发业务需求。

木头 487

C# OCX控件之开发

C#代码 在C#中,实则没OCX控件一说,相对应的只是COM组件,编译后也是.DLL,而不是.ocx.所以在C#中,在创造项目时不得不创设类库项目。 然后乃是具体的代码开发。(略) 要使组件变为能被网页脚本调用的OCX控件,在开发时,要注意以下几点: 一、务必要为将公布OCX控件的主类设立GUID码。该码在创造类库时,C#能自动生成一个(你可以应用,也可以从新生成),依存储在AssemblyInf

liangdiwei的专栏 1948

[游戏排查] Baldur‘s Gate 3 加载完成即崩溃?五步排查帮你快速定位问题

《博德之门3》加载崩溃问题解决方案:针对游戏进度条走完后闪退的情况,提供五步排查法。首先清除LevelCache缓存(成功率最高),其次检查Mod兼容性,然后切换Vulkan/DX11渲染API,再排查存档损坏问题,最后可删除配置目录(需备份存档)。重点提示Steam验证无法解决此类问题,建议按步骤顺序排查,多数情况下前两步即可解决问题。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 3261

C#调用老旧OCX控件的终极指南:从Aximp生成到PictureBox嵌套实战

本文详细介绍了在C#中调用老旧OCX控件的完整流程,从使用Aximp工具生成代理类到通过PictureBox容器实现控件嵌套。针对VS2022开发环境,提供了解决兼容性问题的实用技巧和代码示例,帮助开发者高效集成传统ActiveX控件到现代.NET应用程序中。

h9j8k7l6m5n的博客 1013

stable diffusioncontrolNet 预处理器/模型的下载及安装使用教程

首先说明,controlNet 的模型 不同于stable diffusion 模型,这一点一定要区分清楚。下面提供多个ControlNet 预处理器+ 专用模型的百度网盘下载链接,都是由群友整理贡献,但各自包含的版本不同,大家可自行选择。推荐下载紫色链接内的模型,fp16版文件更小,稍微新一些的controlnet插件还添加了对control-lora的支持(注意,要求controlnet插件的版本比12月16号新(1.1.423以上)才能正常识别),推荐下载;

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3385

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ocx文件转换成C#程序引用的DLL

将ocx文件转换成C#程序引用的DLL文件的办法 将ocx文件转换成C#程序引用的DLL文件的办法,需要的朋友可以参考一下 1.打开VS2008或VS2010命令提示符(此例用VS2008) 将ocx文件拷贝到d:\Program Files\Microsoft Visual Studio 9.0\VC下 2.注册ActiveX控件 regsvr32 IB_USBKEY...

aiquan6271的博客 426

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

告别拖拽!C#用Aximp.exe玩转老旧OCX控件(VS2022实战篇)

本文针对VS2022中OCX控件无法拖拽至工具箱的常见问题,提供了使用Aximp.exe命令行工具的实战解决方案。通过生成托管包装程序集并手动集成到C# WinForm或WPF项目,开发者可以绕过设计时限制,成功复用老旧ActiveX控件。文章详细介绍了核心原理、操作步骤、事件处理及部署方案,帮助开发者解决COM互操作兼容性难题。

weixin_29213827的博客 288

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写。当需要用到Dll引用的时候,我们通常会通过“添加引用”的方式将它们纳入到项目中,然后就可以像使用自己的类一样方便的使用它们了。但是,有些Dll库(OCX)文件是需要注册到Windows注册表后才能正常添加和使用的。本文介绍两种为Dll库(O...

weixin_30507481的博客 78

C#调用OCX控件

之前写了一个调用OCX的winfrom程序,之前运行一直好使,但是突然一天,初始化控件报错,找不到指定模块。。。。。 尝试重新下载ocx,加载ocx,失败。 尝试使用之前程序生成的dll文件失败。 最后发现电脑没有注册ocx,好吧下载去注册一下吧! 以前在web端读取pdf格式都是在客户端安装adobe软件,现在为了满足不在客户端安装adobe软件也可以读取pdf格式文件,所以就用

fuzhenglai的博客 1万+

使用VS2010 C#开发ActiveX控件

最近做读卡器的B/S应用程序开发,由于读卡器厂商提供的手册都是C/S版本的,而且只有一个原始的Dll包,并没有web版的,那么就只好自己动手,丰衣足食了 要开发Web版的读卡程序,大体思路如下: 1. 使用C#对原始的Dll进行封装,这里要封装两部分内容,一部分是串口通信的功能,一部分是对卡读写的功能。 2. 开发ActiveX控件调用封装后的Dl

崔成龙 . 勇往直前 3858
下一篇: Volume Shadow Copy Service(VSS)如何工作
空空为道
博客等级 码龄16年 45粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值