第1章 Delphi与Windows API

Delphi的推出将Windows编程带人了一个新纪元。

Delphi的强大功能以及易用性,使其几乎在任何条件下都能与C++或者VB分庭抗礼。

Delphi最强大的地方之一就是Borland的对象模型(Object model):VCL(Visual Component Library,可视化组件库)。通过这种对象模型可以将大量枯燥的Windows编程代码装到易于使用的组件当中。

  • 对象--与面向对象编程编程中的对象不同,这里所说的对象的范围很宽,任何一个可访问的实体都被称为:在Delphi代码中建立的类是一个对象,TButton控件是一个对象,而在Windows下分配的一块内存区域或者一个图像也可以是对象。
  • 组件--通过一定规则建立的对象,例如VCL就是组件库,在这个库中定义了很多组件。例如TStringList、TButton等。
  • 控件--通常,控件都是可以放置在窗体中的可视组件,例如TButtton、TListBox等。

Windows APT是一个十分庞大的函数集。它定义了所有程序员可能想到的各种用途的函数。

由于Windows API的函数数量众多,一些函数没有实现并且没有被引入到Delphi源代码中。不过既然API函数实际是从DLL中输出的(今天才知道,因而如果知道一个Windows API函数的参数,则引入该函数的过程也就相对简单了(估计要到后面才回体会到,这时DLL的好处)。

引入一个API函数就像从DLL中引入其他函数(有意义)一样。例如在早期版本的Delphi中,第3章中介绍的BroadcastSystemMessage函数就没有被引入到Delphi源代码中,为了引入这个函数在程序中使用,只需要简单地定义一个包含在DLL中的函数,就像下面这样:(心中暂时略去一万字。。。。。。。。。。。。。)

function BroadcastSystemMessage(Flags: DWORD; Recipients: PWORD;
uiMessage: UINT; wParam: WPARAM; lParam: LPARAM): Longint; stdcall;
implementation
function BroadcastSystemMessage;external user32 name 'BroadcastSystemMessageA';'

一旦知道了某个Windows API函数的参数及包含它的DLL(首先DLL要有啊),就可以将其引入并在Delphi程序中使用。需要注意的是,stdcall指示字必须附在函数原型的后面。只有这样,Windows才能按照标准的堆栈(这个还是明白)传递顺序将参数传递给函数。

Delphi开发组做了一项世界级的工作:将大多数Windows API的功能封装到VCL中。然而API函数如此之多,试图将所有的API函数封装到Object Pascal对象中是不可能也是不切实际的。要达到特定目标或者解决特定问题,开发人员需要使用没有封装到Delphi对象中的低层Windows API函数。如果需要扩展一个Delphi对象的功能,而且这个对象封装了一部分Windows API函数,开发人员只能使用Windows API函数来扩展对象功能。

原文地址:https://www.cnblogs.com/spongebob123/p/4134568.html