APP下载

非托管DLL调用.NETCOMDLL实现方法

2018-10-20张毅

智能计算机与应用 2018年5期
关键词:驱动程序调用代码

张毅

Abstract: To complete the hardware driver call,writing a .NET COM DLL in C# language,writing an unmanaged DLL in Delphi,the unmanaged DLL calls the .NET DLL through the Windows COM interface. Based on the above, this article puts forward a complete solution.

引言

Windows COM(组件对象模型)提供了一种在不同应用程序和语言之间共享二进制代码的规范,通过COM接口,多个动态链接库(DLL)组件可以互相通讯。

Microsoft .NET Framework是用于Windows的新托管代码编程模型,.NET托管DLL代码模块从.Net FrameWork运行库中获得垃圾回收、类型检查、安全支持等服务。与托管DLL不同,非托管DLL是在运行库之外运行的代码模块,且必须自行构建服务。例如COM 组件、ActiveX 接口和 Win32 API 函數都是非托管代码的示例。

随着.Net FrameWork普及,很多硬件驱动程序采用C#开发成托管DLL供其它应用程序调用。本文以Delphi 7 为例,探讨Delphi 7 开发EXE应用程序调用C# 定制的COM DLL,再将EXE代码封装为Windows非托管DLL模块,实现非托管DLL通过COM接口调用.NET托管DLL的过程。

英国Solartron数字量传感器Orbit3,其底层驱动调用函数全部封装在名为OrbitLibrary.dll的动态链接库中,并与硬件驱动程序获得同步自动安装。该组件采用C#语言开发,支持平台为.Net FrameWork 4.0,通过VS2010和Delphi7编写程序能够实现对OrbitLibrary.dll的调用,从而满足硬件通讯要求。

本文研究采用的开发模式是混合编程。首先通过C# 2010调试EXE应用程序实现对OrbitLibrary.dll调用,当EXE调用驱动成功后,将EXE代码改写为.NET COM接口组件,并导出tlb文件。在Delphi 7中,通过引用方式在EXE中加载Windows COM组件,实现对OrbitLibrary.dll调用,调试成功再将Delphi EXE代码改写为Windows非托管DLL,而后转入非托管DLL通过COM接口调用.NET COM DLL的过程。该方法已在多个工程项目中得到成功应用。

猜你喜欢

驱动程序调用代码
避免Windows系统更新反复安装显示驱动
阻止Windows Update更新驱动程序
基于Android Broadcast的短信安全监听系统的设计和实现
神秘的代码
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
近期连续上涨7天以上的股
利用RFC技术实现SAP系统接口通信
妙用鼠标驱动
驱动程序更新与推荐