.Net使用非托管程序

开发过程中我们或多或少都要使用到非托管组件,例如常见的ActiveX(一般是vb写的.ocx组件)或Com组件(一般是c++编写)。我们都知道.Net程序是可以使用托管代码的,常见的方式大概可以分为两种:一使用使用DllImport的方式调用直接调用非托管代码;二使用转化为"Interop"开头后缀为".dll"的包装组件(可以通过vs添加引用[vs会自动生成相应组件放到obj文件夹中]或者使用 Tlbimp.exe工具来实现)。

对于第一种方式主要用于简单的调用并且不想用部署ActivX或Com组件的情况下,难点就是根据非托管类型找到对应的托管类型(但是网上介绍了很多方法,包括一些工具来帮助我们解决这个问题)。而对于第二种方法,通过包装类来解决的优点其实就是使用方便,可是它需要注册Com组件(使用regsvr32工具)。

对于第二种方式一块看一个例子吧(第一种我就不再举例子了,有时间我们再重点看一下):

下面一段代码是检查是否插入Usb Key的,UKey的组件本身是ocx控件,通过添加以用UKEYOTPLib在obj中生成一个Interop.UKEYOTPLib.dll来完成对控件的包装,然后在代码中就像使用一般托管组件一样。

首先我先不注册组件试试,结果如下图提示未找到组件。

接着我注册组件而不插入UKey。

插入UKey后

注意:注册组件一般使用Regsvr32工具,像Ukey这种一般都有安装程序,安装的过程中会自动注册。

以上是常用的调用非托管程序的方法,那么除了这两种方法是不是还有其他方式呢?那就是通过"加载非托管动态链接库"的方式来实现。这个个人用的不太多所以也就不再赘余了。

补充:有时候我们在注册了组件却不知道,或者有重复注册的现象(注意重复注册的话会有可能因为版本不同给你造成困扰)。既然这样如何知道所注册的组件信息呢?答案就是利用window优化大师。执行:系统清理--ActiveX清理--分析,就可以看到所有已注册的Com或ActiveX组件。例如下图我注册的Usb Key组件信息。

在这里再给大家介绍一个小技巧:如果你看到了已注册的信息想要反注册而又怕使用命令行麻烦的话,可以先按照window优化大师给出的组件位置,将其放到别处,然后用windows优化大师修复(因为这是指定的位置不存在相应组件,优化大师就认为这是垃圾信息)就可以将注册信息删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值