API函數簡介-- | |||
![]() | ![]() | ![]() | ![]() |
作為一個編程初學者來說,API函數也許是一個時常耳聞卻感覺有些神秘的東西。單看它的復雜語法,就足令人望而生畏,但是任何事物在我們深入了解它之前,總是會有這種感覺的。我們這篇API入門教程的目的,就是要把API函數的來龍去脈告訴大家,破除對API函數的畏懼,使它成為我們編程的好助手。 大家可能在許多書上看到過API的英文全稱(Application Programming Interface),WIN32 API也就是MicrosoftWindows 32位平臺的應用程序編程接口。對這個定義的理解,需要追溯到操作系統(tǒng)的發(fā)展歷史上,當WINDOWS操作系統(tǒng)開始占據主導地位的時候,開發(fā)WINDOWS平臺下的應用程序成為人們的需要。而在WINDOWS程序設計領域處于發(fā)展的初期,WINDOWS程序員所能使用的編程工具唯有API函數,這些函數是WINDOWS提供給應用程序與操作系統(tǒng)的接口,他們猶如“積木塊”一樣,可以搭建出各種界面豐富,功能靈活的應用程序。所以可以認為API函數是構筑整個WINDOWS框架的基石,在它的下面是WINDOWS的操作系統(tǒng)核心,而它的上面則是所有的華麗的WINDOWS應用程序。(配圖1) ![]() ![]() 但是,那時的WINDOWS程序開發(fā)還是比較復雜的工作,程序員必須熟記一大堆常用的API函數,而且還得對WINDOWS操作系統(tǒng)有深入的了解。然而隨著軟件技術的不斷發(fā)展,在WINDOWS平臺上出現了很多優(yōu)秀的可視化編程環(huán)境,程序員可以采用“即見即所得”的編程方式來開發(fā)具有精美用戶界面和功能強大的應用程序。 這些優(yōu)秀可視化編程環(huán)境操作簡單、界面友好(諸如VB、VC++、DELPHI等),在這些工具中提供了大量的類庫和各種控件,它們替代了API的神秘功能,事實上這些類庫和控件都是構架在WIN32 API函數基礎之上的,是封裝了的API函數的集合。它們把常用的API函數的組合在一起成為一個控件或類庫,并賦予其方便的使用方法,所以極大的加速了WINDOWS應用程序開發(fā)的過程。有了這些控件和類庫,程序員便可以把主要精力放在程序整體功能的設計上,而不必過于關注技術細節(jié)。 實際上如果我們要開發(fā)出更靈活、更實用、更具效率的應用程序,必然要涉及到直接使用API函數,雖然類庫和控件使應用程序的開發(fā)簡單的多,但它們只提供WINDOWS的一般功能,對于比較復雜和特殊的功能來說,使用類庫和控件是非常難以實現的,這時就需要采用API函數來實現。 這也是API函數使用的場合,所以我們對待API函數不必刻來研究每一個函數的用法,那也是不現實的(能用的到的API函數有幾千個呢)。正如某位大蝦所說:API不要去學,在需要的時候去查API幫助就足夠了。 |
API函數快速入門--怎樣在VB中聲明和使用API函數-- | |||
![]() | ![]() | ![]() | ![]() |
一、在VB中聲明API函數有兩種方法:如果我們只在某個窗體中使用API函數,我們可以在窗體代碼的General部分聲明它: 聲明的語法是: Private Declare Function ... Private Declare Sub..... 這里必須采用Private聲明,因為這個API函數只能被一個窗體內的程序所調用。 ![]() 先添加一個模塊(如圖示), 然后采用如下語法聲明: Public Declare Function.... Public Declare Sub.... Public聲明的含義是把API函數作為一個公共函數或過程,在一個工程中的任何位置(包括所有的窗體和模塊)都能直接調用它。 聲明完畢我們就能在程序中使用此API函數了。 二、可采用以下幾種方式使用API函數,以SetWindowPos函數為例: ?。?)忽略函數返回值的調用: SetWindowPos Form1.hWnd, -2 ,0 ,0 ,0, 0, 3 注意此時函數的參數是不加括號的。 ?。?)Call方法調用: Call SetWindowPos(Form1.hWnd, -2, 0, 0, 0, 3) 注意這里需要加上括號,但我們不取回函數的返回值。 ?。?)取得函數返回值的調用: MyLng = SetWindowPos(Form1.hWnd, -2, 0, 0, 0, 3) 此時需要加上括號,而且我們必須事先定義一個變量(變量的類型與函數返回值類型相同)來存儲API函數的返回值。 三、幾個問題的說明: (1)聲明中的Lib 和 Alias 是怎么回事 一般情況下WIN32API函數總是包含在WINDOWS系統(tǒng)自帶的或是其它公司提供的動態(tài)連接庫DLL中,而Declare語句中的Lib關鍵字就用來指定DLL(動態(tài)連接庫)文件的路徑,這樣VB才能找到這個DLL文件,然后才能使用其中的API函數。如果我們只是列出DLL文件名而不指出其完整的路徑的話,VB會自動到.EXE文件所在目錄、當前工作目錄、WINDOWS\SYSTEM目錄、WINDOWS目錄下搜尋這個DLL文件。所以如果所要使用DLL文件不在上述幾個目錄下的話,我們應該指明其完整路徑。 Alias用于指定API函數的別名,如果我們調用的API函數要使用字符串(參數中包含String型)的話,Alias關鍵字是必須的。這是因為在ANSI和Unicode字符集中同一API函數的名稱可能是不一樣的,為了保證不出現聲明錯誤,我們使用Alias關鍵字指出API函數的別名,一般來說在WIN9X平臺下我們把API函數名后加一個大寫A作為別名即可。 (2)常見的API參數類型的說明 API函數的參數中最常見的是長整Long型數據類型,例如API中的句柄、一些特定的常量、函數的返回值都是此類型 的值;另外幾種常見的參數類型有:整型Integer、Byte型、String型等。 (3)聲明中的ByVal是作什么用的 這跟VB的參數傳遞方式有關,在默認情況下VB是通過地址傳遞方式傳遞函數的參數、而有些API函數要求必須采用傳值方式來傳遞函數參數(這兩種參數傳遞方式是不同的,前者傳遞的是一個指針,而后者要求是參數真實的值)。這樣就會發(fā)生錯誤,解決的辦法是在API函數參數聲明的前面加上ByVal關鍵字,這樣VB就采用傳值方式傳遞參數了。 ?。?)怎樣得到完整的API函數聲明 VB自帶了API文本查看器API TEXT VIEWER,我們可以在其中找到API函數的完整聲明,然后把它粘貼到程序中即可。 |
怎樣在DELPHI中使用API函數-- | |||
![]() | ![]() | ![]() | ![]() |
實際上,在DELPHI中調用WIN32 API函數與在C或C++中調用WIN32 API函數沒有大的區(qū)別。DELPHI中將C或C++中引用 的WINDOWS.H頭文件改寫為WINDOWS.PAS單元,使WINDOWS API函數的定義符合PASCAL語法。而其他的頭文件在DELPHI中也都有相應的.PAS單元一一對應,所以在DELPHI中調用API函數時,只須將相應的API函數單元加入到USES語句的單元之中,便可直接調用相應的函數了。 下面我們來看一個簡單的例子,程序的作用是改變桌面墻紙: unit Unit1; interface {Windows.PAS是DELPHI提供的標準單元,我們要調用API函數,需要引用這個單元} uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm); Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var filename1:string; begin filename1:='c:\windows\mywallpaper.bmp'; {調用API函數SystemParametersInfo來設置桌面墻紙的圖片文件為'c:\windows\mywallpaper.bmp'} SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,pchar(filename1), SPIF_UPDATEINIFILE); end; end. 其中SystemParametersInfo函數的參數的意義如下表:
下面是本例的uAction常數,和使用它的方法:
好了在DELPHI中調用API函數就是這樣簡單,我們需要知道的只是API函數的意義和參數列表,然后把它用到程序中就可以了。需要提醒的是C的數據類型可能會與DELPHI的數據類型有些不同,而調用API函數時必須保證類型一致才行,這是我們必須注意的一點。 |
WIN32 API的分類介紹-- | 下一節(jié) | ||
![]() | ![]() | ![]() | ![]() |
今天我們把標準WIN32 API函數分類介紹一下,雖然我們不必去刻意研究每個API函數的用法,但是在需要的時候,至少應該知道它屬于哪一類的API函數,這樣才能正確查找和使用。 按照通常的劃分標準,WIN32 API函數分為七大類: 1、窗口管理類:這類API函數向應用程序提供了一些創(chuàng)建和管理用戶界面的方法,我們可以使用它們來做出程序的界面。 上面的分類對于我們來說還是顯得寬泛了一些,所以本節(jié)以后的各節(jié)會采用小分類的方法,也就是按具體功能的劃分為大家介紹一些常用的API函數的用法。 |