利用文件接口调用Delphi编写的API函数!墨墨QQ墨:全曼CN13一l265/TE承德石油高等专科学校JournalofChengdePetroleumCollege第4卷第3期2002年9月Vo1.4No.3Sep.2002利用文件接口调用Delphi编写的API函数马晓晨(承德石油高等专科学校计算机与信息工程系,河北承德067000)摘要:在研究Windows操作系统API函数的基础上,深入分析了不同开发工具所编写的API函数的调用过程,通过事例提出了在VB环境中开发的应用程序利用文件接口调用Delphi编写的API函数的方法.关键词:接口lAPIl函数调用:TP31文献标识码:B:1008—9446(2002)03—0018—04动态链接库(DynamicLinkLibrary,简称DLL)是一些编译过的可执行代码模块,后缀名为DLL,可以在应用程序中或其他DLL中被调用.在Windows环境中,DLL可以实现多个应用程序共享代码和资源.MicrosoftWindows本身就是由若干个DLL组成的,其它应用程序可以调用这些库中的过程,完成窗口与图形的显示,内存管理或其他任务.这些过程有时被称为WindowsAPI,或应用程序接口.除了Windows提供的API之外,用户还可以开发自己的API,这种开发给程序开发带来了很多灵活性,使系统增加了许多新的功能和方法.而且DLL还独立于编程语言,利用某种开发工具编写的DLL可以在其他环境中使用,例如,在Delphi环境中开发的DLL程序可以在VisualC++环境中方便地使用;同时,在Delphi环境中也可以方便地使用在VisualC++开发的DLL.但是,在Delphi环境中编写的API函数并不是在所有的开发环境中都可以方便顺利的使用.本文以我在实际应用开发过程中调用Delphi环境中编写的API函数为例进行分析和说明.为了二次开发和扩展光谱采集与分析系统,购买了新的分光计设备,新设备功能强大,并提供了用Delphi编写的API函数,通过调用这些函数进行二次开发可使原系统的功能大大加强,原系统是用VB开发的,因此在扩展系统功能时需要在VB环境调用Delphi编写的API函数.下面谈一下调用时存在的问题及解决办法.l在VisualBasic调用Delphi编写的API函数时出现的问题分光计提供的API函数主要有:初始化设备SWDinit,关闭设备SWDclose,设置接收频率SWDrate,接收数据SWDscan,关闭设备SWDclose,在程序设计过程中,需要对这5个函数进行调用.由于DLL过程存在于VisualBasic应用程序之外的文件中,在使用时必须指定过程的位置和调用参数.可以用Declare语句提供这类信息.在声明了DLL过程之后,可以把它当做自己的过程使用.程序如下:OptionExplicitDeclareFunctionSWDinitLib"swdll初始化设备DeclareFunctionSWDcloseLib"swdll关闭设备DeclareFunctionSWDrateLib'swdll"(ByValchanAsInteger)设置接收频率DeclareFunctionSWDscanLib"swdll"(ByValchanAsInteger,bufferAsInteger)收稿日期:2002-03—19作者简介:马晓晨(1968一),男,承德石油高等专科学校计算机与信息工程系副主任,讲师,主要从事教学管理与计算机教学和研究工作.马晓晨:利用文件接口调用Delphi编写的API函数?19?AsLong'接收数据,接收成功返回接收数据的个数,接受不成功返回O,chan为传送数据的通道号.dimarrayl(Oto2050)Assingle;PrivateSubForm...——Load()SWDinit,初始化设备SWDrate(5),设置接收频率EndsubPrivateSubFormUnload(CancelAsInteger)SWDclose关闭设备EndSubPrivateSubCommand...——Click()SWDscan(1,array1())接受通道1的数据EndSub在程序执行过程中,不能正常接受数据,在调用SDWscan函数时采用其他传送参数地址的办法也没有成功.2采用文件做接Iz/,实现VB对Delphi编写的API函数的调用通过研究,利用文件做为VB和Delphi应用程序之间传递参数的接口,取得了较好的运行效果.利用Delphi编写调用API函数的程序,并把所采集的数据实时写入文件.利用VB编写的分析系统通过读取文件中的数据实现了对外部数据的采集.程序如下:2.1利用Delphi编写调用API函数的程序unitcollect此处省略一些Delphi的程序说明部分typeatype=array[0.2050]ofsingle;//定义接收数据的数组aptype=atype;∥定义数组指针变量TF0rml=class(TForm)//定义窗体Timerl:TTimer;//定义一个计时器控件定时采集数据,时间间隔属性初始化为1000.procedureFormCreate(Sender:TObject);procedureFormClose(Sender:TObject;varAction...