1 / 9
文档名称:

在易语言中调用DLL使用说明.doc

格式:doc   页数:9页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

在易语言中调用DLL使用说明.doc

上传人:zhangbing32159 2014/2/10 文件大小:0 KB

下载得到文件列表

在易语言中调用DLL使用说明.doc

文档介绍

文档介绍:易语言中调用DLL使用说明
基本说明

“在易语言中调用DLL”包含两方面的内容:调用Windows系统API函数;调用普通DLL函数。
下文用到的“调用API”或“调用DLL”等字眼,除非特别注明,一般都是指以上两方面之一或之和,视上下文而定。绝大多数情况下,无需明确区分调用的是系统API还是普通DLL。
目前易语言只支持以stdcall方式调用DLL中的导出函数。
Windows系统API一般都是以stdcall调用方式导出的,故在易语言中调用它们时通常不必考虑函数调用方式的问题。而普通DLL有可能导出“非stdcall调用方式”(比如cdecl)的函数,调用时需要特别注意。一般而言,考虑到通用性,DLL开发者都会选择导出以sdtcall方式调用的函数。(支持生成DLL的编程语言通常都支持导出stdcall调用方式的函数,具体实现请参考各编程语言手册。)
特别地,在VC中类似如下代码导出的函数并非stdcall调用方式:
extern "C"
__declspec (dllexport) test(int a, int b)
{
return (a + b);
}
要想该函数被易语言调用,应该按类似如下方式定义():
int WINAPI test (int a, int b)
{
return (a + b);
}
易语言编译生成的DLL,其导出函数全部为stdcall调用方式,所以在易语言中调用易语言生成的DLL不存在问题。
目前在易语言中调用DLL时只支持1字节对齐的结构(自定义数据类型)
如果DLL命令的某个参数或参数的某个成员是结构类型(自定义数据类型),则其对齐方式必须是1字节对齐。Windows系统API中所用到的结构都是1字节对齐的,故在调用API时不受此限制。但如果想用其它编程语言生成DLL供易语言调用且数据类型中包含了1或2字节数据长度的成员(如字符型或短整数),就需要考虑结构的1字节对齐。
在VC中,可以这样定义1字节对齐的结构(结构在C/C++中称为struct):
#pragma pack (push, old_value) // 保存VC++编译器结构对齐字节数。
#pragma pack (1) // 设置为以一字节对齐。
struct xxx
{
byte a;
int b;
double c;
};
#pragma pack (pop, old_value) // 恢复VC++编译器结构对齐字节数。
在Delphi中,可以这样定义1字节对齐的结构(结构在Delphi中称为record):
type
xxx = packed record
a: byte;
b: integer;
c: double;
end;
在其它编程语言或编译器中的定义方式请参考各自的编程手册。
目前易语言支持调用任意复杂的DLL命令
只要满足了前面的两个条件——调用方式为stdcall,参数结构为1字节对齐——易语言支持调用任意复杂的DLL命令:参数除了可以是基本数据类型或普通结构类型外,还可以是基本类型地址或基本类型数组,也可以是结构类型地址或结构类型数组,结构