易语言支持库开发手册 for Delphi.docx
《易语言支持库开发手册 for Delphi.docx》由会员分享,可在线阅读,更多相关《易语言支持库开发手册 for Delphi.docx(7页珍藏版)》请在冰豆网上搜索。
易语言支持库开发手册forDelphi
易语言支持库开发手册forDelphi
版本:
1.0
日期:
2008.5
作者:
大连大有吴涛易语言软件开发有限公司
综述
这是易语言支持库开发包(EDK,EDevelopmentKit)开发手册之Delphi版本。
本文主要介绍如何用Delphi开发易语言支持库。
基本说明
支持库是扩展易语言系统的主要方式之一,也是最有效的方式之一。
通过使用其它编程语言为易语言开发支持库,易语言系统的功能可以得到无限扩展。
通过支持库这一途径,易语言可以充分整合其它编程语言和操作系统的各种资源,为我所用。
他山之石,可以攻玉。
易语言支持库实际上是动态链接库(在Windows下为DLL文件,在Linux下为SO文件)
易语言支持库必须导出"GetNewInf"函数:
functionGetNewInf():
pLIB_INFO;stdcall;export;
易语言支持库文件的后缀名通常是".fne",还可能是".fnr"或".fnl"
易语言中的文本、字节集、数组等数据都有其特定的二进制格式,请参考“数据存储格式”
开发易语言支持库之前,一定要仔细阅读本文档,和EDK中提供的e.pas头文件(其中有很多信息本文档没有涉及)
易语言对支持库的要求很简单,只要导出GetNewInf函数并返回填充完整的LIB_INFO结构体(record)的内存首地址即可。
这看似简单的要求,实际操作起来却十分繁索,要知道,LIB_INFO是一个非常复杂的结构体(record),要完整的填充它不是一件轻松的事情。
在Delphi版本的易语言支持库开发包中,我们做了大量的工作来简化这项操作,目的就是让Delphi开发易语言支持库比C/C++更容易。
还有一点要说明,Delphi/VCL并不能完全融合到易语言中,在开发支持库时存在一定的局限性。
配置开发环境
下载易语言支持库开发包(EDK),解压缩到任意目录(如"c:
\edk")。
安装Delphi(5/6/7/8/2005/2006/2007/2008)。
本文以Delphi7为主。
配置Delphi,指定库搜索路径。
请选择Delphi主菜单,"Tools->Environment
Options...",在"Library"子项内的"LibraryPath"中增加e.pas所在路径(如"c:
\edk")。
以上操作为一次性操作,以后不需要重复进行。
第一个支持库
在Delphi中创建一个空白的Win32DLL工程(project),存储为myfne.dpr,修改其代码如下:
librarymyfne;
uses
e,SysUtils,Classes;
{$R*.res}
{$Efne}//指定编译出的文件名后缀为"fne"
//易语言支持库要求的导出函数GetNewInf()
functionGetNewInf():
pLIB_INFO;stdcall;export;
begin
result:
=GetLibInfo();
end;
//函数导出表(exports)
exports
GetNewInf;
begin
DefineLib
(
'myfne','{5CAFDDB6-22E7-4B27-823A-A80A3919189F}',//szName,szGuid
'Delphi开发的一个简单的易语言支持库,主要用于演示。
',//szExplain
1,0,1,__GBK_LANG_VER,//nMajorVersion,nMinorVersion,nBuildNumber,nLanguage
0,//dwState
'大连大有吴涛易语言软件开发有限公司','','',//szAuthor,szHomePage,szOther
2,'0000分类1'#0'0000分类2'#0,//nCategoryCount,szzCategory
nil,nil,//pfnRunAddInFn,szzAddInFnInfo
nil,//pfnNotifyLib(canbenil,defaulttoDefaultProcessNotifyLib)
nil,//szzDependFiles
nil,//pfnFreeLibData
);
end.
将以上代码编译之后,即得到一个合法的空白的易语言支持库myfne.fne,此支持库还没有任何功能,但可被易语言正常加载。
请参考:
测试和调试。
以上代码,是我们在Delphi自动生成的代码骨架的基础上添加修改而成。
请注意以下几点:
引用(uses)了易语言官方提供的e.pas(或e.dcu)文件
通过编译指令({$Efne})指定了编译后的动态链接库的后缀名为"fne"(而非普通的"dll")
定义并导出(exports)了支持库规范所要求的GetNewInf()函数
通过调用DefineLib()函数定义了支持库的基本信息
支持库名称(即DefineLib()的第一个参数)和支持库的文件名称没有关系,可分别任意取名(一般前者为中文后者为英文)
代码中用到的GetLibInfo(),DefineLib()等都是e.pas中定义的函数/过程(如果有兴趣,不妨看看它们的内部实现代码)
begin段中的代码将在支持库被加载时自动执行
为了扩充这个空白的支持库,我们需要增加其它的代码。
又为了保持代码的相对独立,我们把新增加的代码放在一个新创建的Unit1.pas文件中:
unitUnit1;
interface
usese;
implementation
initialization
DefineConst('常量一','const1','这个常量一的说明,文本常量',CT_TEXT,0,'常量一的值(文本)');
DefineConst('常量二','const2','这个常量二的说明,数值常量',CT_NUM,1999,nil);
DefineConst('常量三','const3','这个常量三的说明,逻辑常量',CT_BOOL,1,nil);
end.
以上代码,是我们在Delphi自动生成的代码骨架的基础上添加修改而成。
请注意以下几点:
引用(uses)了e.pas(或e.dcu)文件
在initialization段中调用了DefineConst(),定义了三个易语言常量
DefineConst()是e.pas中定义的函数/过程
initialization段中的代码将在支持库加载时自动执行
再次编译支持库,其中将多出三个常量。
注意:
慎用initialization段,尤其是工程中存在多个.pas文件的情况。
数据类型
这一节主要介绍易语言支持库中,数据类型的标识,和数据类型的存储。
数据类型标识
在易语言支持库中,使用特定的数值来标识各种数据类型。
在定义命令的返回值类型、参数类型、成员类型等需要指定数据类型的地方,均需指定相应的标识数值。
以下是易语言基本数据类型与其标识数值对照表:
基本类型
标识
说明
字节型
SDT_BYTE
SDT_*等是e.pas中定义的数值常量,下同
短整数型
SDT_SHORT
整数型
SDT_INT
长整数型
SDT_INT64
小数型
SDT_FLOAT
双精度小数型
SDT_DOUBLE
逻辑型
SDT_BOOL
日期时间型
SDT_DATE_TIME
文本型
SDT_TEXT
字节集
SDT_BIN
子程序指针
SDT_SUB_PTR
条件语句型
SDT_STATMENT