开发过程中我们或多或少都要使用到非托管组件,例如常见的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优化大师修复(因为这是指定的位置不存在相应组件,优化大师就认为这是垃圾信息)就可以将注册信息删除。
分享到:
相关推荐
在VB.NET中创建托管线程主要使用`System.Threading.Thread`类。下面是一个简单的例子: ```vbnet Dim newThread As New Thread(AddressOf WorkerMethod) newThread.Start() ``` 在这个例子中,`WorkerMethod`是我们...
这时,可以使用.NET Framework的P/Invoke(Platform Invoke)服务或.NET Core的DllImport特性来实现托管代码与非托管代码的交互。 在实际应用中,托管代码和非托管代码的结合使用可以充分利用两者的优势。例如,...
托管代码与非托管代码是编程领域中的两个重要概念,它们主要与.NET框架和C++等语言的使用密切相关。本文将深入探讨这两个概念,以及DLL动态链接库调用的相关知识。 首先,我们来理解什么是托管代码。在.NET环境中,...
他还可能会讨论托管代码如何通过.NET Framework的CLSCompliant特性来保证语言的互操作性,以及如何使用Unsafe代码块来处理非托管资源,这在处理低级别操作时非常关键。 此外,书中的内容可能还会涵盖托管与非托管...
标题 "托管ORACLE驱动" 指的是在.NET框架中使用Oracle数据库的托管驱动程序,这意味着开发者无需在服务器或开发环境中安装完整的Oracle客户端软件。在.NET 4.0环境下,Oracle提供了一种名为ODP.NET(Oracle Data ...
.NET Framework 是微软开发的一个软件框架,它为开发者提供了一个统一的平台来编写各种应用程序,支持多种编程语言,如C#、Visual Basic、托管C++等。在这个框架下,开发过程通常借助于Visual Studio(VS)这个强大...
对于非托管的Web服务调用,我们需要使用SOAP协议进行通信,因为非托管代码无法直接使用.NET框架的托管Web服务支持。以下是调用非托管Web服务的基本步骤: 1. 创建HTTP请求,设置适当的头信息,包括SOAPAction和...
本文主要探讨如何使用纯C#实现托管与非托管DLL的注入。 一、托管与非托管DLL的区别 1. 托管DLL:由.NET Framework管理的代码,遵循.NET的语法规则,编译后生成MSIL(中间语言),在运行时通过JIT(Just-In-Time)...
本课程介绍使用VB.NET开发Windows应用程序所需的知识和技能 预备知识 掌握基本的VB.NET语法 掌握数据库的基本知识 掌握面向对象的编程思想 能够使用Visual Studio.NET图形化界面开发环境 课时:108 课时 分为两部分 ...
【面向.NET的Web应用程序设计】课程的课后答案涵盖了.NET Framework的基本概念及其核心组成部分,以及Microsoft Visual Studio .NET的使用技巧。以下是对这些知识点的详细解释: 1. **Microsoft .NET Framework**:...
本教程将深入探讨如何使用VB.NET编写DLL注入程序,以及相关的知识点。 首先,我们需要了解DLL的基本概念。DLL是一种可重用的代码库,它包含一组可供其他应用程序调用的函数或方法。DLL注入通常涉及将一个DLL文件...
作者:[英]Richard Grimes <br>梁超 钱伟 吴连祥 译 <br>微软.NET程序员系列 <br>... 本书适合准备使用C++.NET托管扩展进行开发的中、高级读者阅读。 <br>http://www.verycd.com/topics/127242/<br>
8. **部署**:学习如何将Web应用程序发布到IIS服务器,或者使用Azure等云平台进行托管。 9. **错误处理和日志记录**:理解如何捕获和处理异常,以及记录应用程序的运行情况。 10. **性能优化**:探讨缓存策略、...
在IT行业中,VB.NET是一种广泛使用的编程语言,尤其在创建桌面应用程序方面表现出色。本话题主要涉及使用VB.NET进行CAD(计算机辅助设计)软件的开发,特别是如何通过托管代码(Managed Code)实现这一目标。首先,...
标题中的“如何自动将.NET功能导出到非托管程序”是指在.NET环境中创建一个库或服务,使得非托管代码(如C++、Java或其他非.NET语言编写的应用)能够调用.NET的功能。这通常通过实现COM互操作或者使用P/Invoke...
1. **P/Invoke**:使用Platform Invoke(P/Invoke)机制是.NET与非托管代码交互的基础。通过定义DllImport特性,我们可以导入非托管库中的函数,并指定参数类型和返回值。在回调方法中,我们需要传递一个委托类型的...
本文将详细介绍如何使用 IIS 调试 ASP.NET 网站程序的完整步骤,从标题到描述、标签和部分内容,我们都将对 ASP.NET 编程知识进行详细的解释和分析。 首先,让我们来看一下标题“利用 IIS 调试 ASP.NET 网站程序的...
这个"ASP.NET精品全站程序SQL版源码"是一个完整的解决方案,它包含了一整套使用ASP.NET技术和SQL数据库构建的网站应用。下面将详细阐述这个源码包可能涉及的关键知识点: 1. **ASP.NET框架**:ASP.NET提供了多种...
总的来说,扩展MFC程序使用.NET Framework是一项技术挑战,但也提供了无限的可能性。开发者可以通过熟练掌握这两种技术的结合,构建出既有MFC的灵活性和效率,又具有.NET丰富功能的高效应用程序。