Delphi 动态链接库编程(二)
2008-02-23 07:17:09来源:互联网 阅读 ()
10.2.1.6 编写一般DLLs的应用举例
在下面的程序中我们把一个字符串操作的函数储存到一个DLLs中,以便需要的时候调用它。应该注意的一点是:为了保证这个函数可以被其它语言编写的程序所调用,作为参数传递的字符串应该是无结束符的字符数组类型(即PChar类型),而不是Object Pascal的带结束符的Srting类型。程序清单如下:
library Example;
uses
SysUtils,
Classes;
{返回字符在字符串中的位置}
function InStr(SourceStr: PChar;Ch: Char): Integer; export;
var
Len,i: Integer;
begin
Len := strlen(SourceStr);
for i := 0 to Len-1 do
if SourceStr[i] = ch then
begin
Result := i;
Exit;
end;
Result := -1;
end;
exports
Instr Index 1 name 'MyInStr' resident;
begin
end.
10.2.2 调用DLLs
有两种方法可用于调用一个储存在
DLLs中的过程。1.静态调用或显示装载
使用一个外部声明子句,使
DLLs在应用程序开始执行前即被装入。例如:function Instr(SourceStr : PChar;Check : Char); Integer; far; external 'UseStr';
使用这种方法,程序无法在运行时间里决定
DLLs的调用。假如一个特定的DLLs在运行时无法使用,则应用程序将无法执行。2.动态调用或隐式装载
使用
Windows API函数LoadLibray和GetProcAddress可以实现在运行时间里动态装载DLLs并调用其中的过程。若程序只在其中的一部分调用
DLLs的过程,或者程序使用哪个DLLs, 调用其中的哪个过程需要根据程序运行的实际状态来判断,那么使用动态调用就是一个很好的选择。使用动态调用,即使装载一个
DLLs失败了,程序仍能继续运行。10.2.3 静态调用
在静态调用一个DLLs中的过程或函数时,external指示增加到过程或函数的声明语句中。被调用的过程或函数必须采用远调用模式。这可以使用far过程指示或一个{$F }编译指示。
Delphi全部支持传统Windows动态链接库编程中的三种调用方式,它们是:
● 通过过程/函数名
● 通过过程/函数的别名
● 通过过程/函数的顺序号
通过过程或函数的别名调用,给用户编程提供了灵活性,而通过顺序号(Index)调用可以提高相应DLL的装载速度。
10.2.4 动态调用
10.2.4.1 动态调用中的API函数
动态调用中使用的Windows API函数主要有三个,即:Loadlibrary,GetProcAddress和Freelibrary。
1.Loadlibrary: 把指定库模块装入内存
语法为:
function Loadlibrary(LibFileName: PChar): THandle;
LibFileName指定了要装载DLLs的文件名,如果LibFileName没有包含一个路径,则Windows按下述顺序进行查找:
(1)当前目录;
(2)Windows目录(包含win.com的目录)。函数GetWindowDirectory返回这一目录的路径;
(3)Windows系统目录(包含系统文件如gdi.exe的目录)。函数GetSystemDirectory返回这一目录的路径;
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Delphi 与SQL编程(一)
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash