浅议Delphi中的WindowsAPI调用

浅议Delphi中的WindowsAPI调用,第1张

浅议Delphi中的WindowsAPI调用,第2张

为了在Windows下快速开发应用程序,Delphi封装了Windows的所有控件,这样我们就可以直接使用Delphi控件编写程序,而不用使用复杂的API进行开发,节省了我们大量的开发时间。

但是有时候这些控制并不能解决我们的问题。这时候我们就要用API了,API是Windows的应用程序接口。这样,问题也就随之而来了。API是用C++语言写的,而Delphi的脚本语言是PASCAL,所以两者使用的数据类型是不兼容的。那么,在Delphi中如何调用数据类型不兼容的API呢?这就是我将在本文中向您介绍的内容。

Delphi中最常用的数据类型之一是string,API不支持。那么当我们需要从API中获取一个字符串值的时候应该怎么做呢?看看下面的程序:

函数GetSysPath:string;
var
sTmp:string;
begin
result:= ' ';
//调用WindowSAPi获取Windows的系统路径
SetLength(sTmp,256);
get system directory(PChar(sTmp),256);//这是一个API函数
setLength (stmp,strlen(pchar(stmp)));
result:= sTmp+' \ ';
end;
在这个函数中,调用了API函数GetSystemDirectory,它的第一个参数是一个指向以NULL结尾的字符串的指针。在Delphi中,这个数据类型是PCHAR,所以这里需要进行数据类型转换,应该写成PChar(sTmp)。让我们看另一个例子:
ProcedureForm1。ChangeAppicon
var
icon:TIcon;
begin
图标:= TIcon。创建;
尝试
图标。Handle := ExtractIcon(应用程序。Handle,pchar('D:\WINNT\regedit.exe '),0);//这是一个API函数
if icon . handle 0 then
application . icon:= icon;
最后
图标。免费;
end;
end;

这个进程通过API函数获取一个应用程序的图标,动态改变当前程序的图标。函数API ExtractIcon返回一个HICON类型,这是一个指向图标的指针。如果写成application . icon = extract icon(application . handle,pchar ('d: \ winnt \ regedit.exe '),0);编译肯定会失败,数据类型不一致!应用程序。Icon属性属于TICON类型。我们可以创建一个Ticon,将API的返回值赋给Ticon。处理,最后将图标分配给应用程序。图标,解决了我们的问题。

从上面的例子可以看出,Delphi并不直接支持Windows中的数据类型,只是通过封装来支持。要熟练调用API函数,必须熟悉Delphi的打包机制,多读多写多练,才能随心所欲地调用API函数。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 浅议Delphi中的WindowsAPI调用

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情