欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
CSDN技術(shù)中心 Delphi背后---初學(xué)者參考之二(2)
CSDN -文檔中心 -Delphi 閱讀:4624   評論: 3   參與評論
標題  Delphi背后---初學(xué)者參考之二(2)     選擇自huojiehai 的 Blog
關(guān)鍵字  VCL、API、COM、嵌入式匯編語(yǔ)言
出處
(續Delphi背后---初學(xué)者參考之二(1) )
2 Windows API
API(Application Programming Interface)應用編程接口,所有的計算機語(yǔ)言都要用到它。API是什么?API是程序使用操作系統提供的服務(wù)的一個(gè)途徑,我們大多數的編程都不直接操作硬件,而是調用這些API,再由操作系統直接操作硬件,這樣的好處是我們編程時(shí)不必考濾與硬件兼容的問(wèn)題,更重要的是從操作系統層實(shí)現了代碼共享。所以,在編程時(shí)如果能用API實(shí)現的功能,我們盡量用它。
l         Delphi如何使用Windows API
在日常開(kāi)發(fā)工作中,我們經(jīng)常要使用Windows API函數,那么API函存在在哪里呢?我們可以這樣理解,API函數就是封裝在Windows系統提供的DLL系統文件中。如我們經(jīng)常使用的Beep過(guò)程(響鈴),就是調用Windwos系統目錄下的user32.dll中的MessageBeep實(shí)現的;SendMessage(發(fā)消息)就是直接調用user32.dll的SendMessageA。Delphi使用頻率最多的Dll是:advapi32.dll、kernel32.dll、mpr.dll、version.dll、comctl32.dll、gdi32.dll、opengl32.dll、user32.dll、wintrust.dll、msimg32.dll。
那么Delphi是如何使用這API函數的呢?既然API函數存在于系統的DLL中,那么我們就可以像調用自己寫(xiě)的DLL一樣調用API函數啦。調用DLL函數有兩種方式,一種是靜態(tài)方式,一種是動(dòng)態(tài)方式。調用Windows的API都是采用靜態(tài)方式,為什么呢?這是因為這些DLL是操作系統提供的最基本服務(wù),操作系統在啟動(dòng)時(shí)就已經(jīng)加載到內存中了,并且操作系統也大量的使用他們。
l         API與日常編程
Delphi封裝了Windows的大部分API函數(主要在Windows.pas單元中),應該說(shuō)可以完成我們的大部分工作,我們一般不直接調用API函數。但有時(shí)有特別要求時(shí),我們可能就要調用一些Delphi沒(méi)封裝過(guò)的API,有時(shí)甚至會(huì )調用Windows沒(méi)公布的API函數。那么如何調用這些API函數呢?就像前面說(shuō)的,使用靜態(tài)方法調用就好了。更詳細的調用請參看相關(guān)的資料。
調用這些Delphi沒(méi)封裝的API函數關(guān)鍵是要知道參數??梢圆殚喛醋钚碌腗SDN或相關(guān)的資料。
l         API與VCL
Microsoft的MFC大量的封裝地Windows API,VCL也不例外。VCL功能的實(shí)現大部分都離不開(kāi)Windows API,要么是直接調用,要么是經(jīng)過(guò)簡(jiǎn)單的封裝再調用。如TControl的Repaint的實(shí)現(Control單元中):
procedure TControl.Repaint;
var
DC: HDC;
begin
if (Visible or (csDesigning in ComponentState) and not (
csNoDesignVisible in ControlStyle)) and (Parent <> nil) and
Parent.HandleAllocated then
if csOpaque in ControlStyle then
begin
//直接調用user32.Dll的GetDC
DC := GetDC(Parent.Handle);
Try
//直接調用gdi32.Dll的IntersectClipRect
IntersectClipRect(DC, Left, Top, Left + Width, Top +
Height);
// Parent.PaintControls調用大量的API
Parent.PaintControls(DC, Self);
Finally
// 直接調用user32.Dll的ReleaseDC
ReleaseDC(Parent.Handle, DC);
end;
end else
begin
//以下兩個(gè)經(jīng)過(guò)封裝調用
Invalidate;
Update;
end;
end;
可見(jiàn)VCL中處處都有API,我們從另外一個(gè)面來(lái)理解VCL就是:VCL就是大量封裝API函數的類(lèi)庫,這樣的結果就是使我們更容易使用API,不必關(guān)心那些煩人的API參數。
3 Delphi與Windwos COM服務(wù)
COM是什么東西?COM(Component Object Model),組件對象模型,它是基于Windows平臺的讓不同的獨立對象能相互通訊的不受任何計算語(yǔ)言約束的軟件組件模型,它定義一組API和一個(gè)二進(jìn)制標準。這個(gè)定義比較抽象,首先它是一種組件模型,定義了一種組件對象規范,實(shí)現這個(gè)COM模型的對象就是COM對象。COM對象是通過(guò)接口(Interface)來(lái)實(shí)現訪(fǎng)問(wèn)的,一個(gè)COM對象可以包含一個(gè)或多個(gè)接口,這些接口構成了COM對象的功能,你可以像訪(fǎng)問(wèn)VCL對象方法一樣訪(fǎng)問(wèn)COM對象的接口方法。COM對象的目的是實(shí)現資源共享,它在二進(jìn)制代碼級別實(shí)現了共享,所以它可以用不同的編程語(yǔ)言來(lái)實(shí)現,也可以由不同的編程語(yǔ)言來(lái)調用,這類(lèi)似于DLL(其實(shí)COM的思想來(lái)源來(lái)DLL)。
l         VCL與COM
COM是Microsoft以前極力推崇的東西,所以在Windows操作系統中無(wú)處不在,同樣Delphi的VCL也有調用Windows COM服務(wù)的,最明顯例子就是組件欄A(yíng)DO頁(yè)的所有ADO組件,如TADOQuery,它是從TCustomADODataSet繼承下來(lái)的,而TCustomADODataSet的定義如下:
TCustomADODataSet = class(TDataSet, IUnknown,
RecordsetEventsVt)
private
FRecordsetObject: _Recordset;
FFindCursor: _Recordset;
FLookupCursor: _Recordset;
FLockCursor: _Recordset;
FRowset: IRowset;
FAccessor: IAccessor;
FRowsetFind: IRowsetFind;
FHAccessor: HACCESSOR;
FOleRecBufSize: Integer;
end;
ADO(Microsoft ActiveX Data Objects),它是一組通過(guò)Microsoft OLE DB 提供者訪(fǎng)問(wèn)數據庫的COM對象的集合。如我們研究一下TADOQuery的First方法的實(shí)現過(guò)程:
TADOQuery.First->TDataSet.First->TdataSet.InternalFirst-> TCustomADODataSet. InternalFirst ->Recordset15. MoveFirst
TADOQuery從TCustomADODataSet繼承,而TCustomADODataSet從TdataSet繼承,TdataSet.InternalFirst定義的是虛方法,而子類(lèi)TCustomADODataSet. InternalFirst覆蓋了它。TCustomADODataSet. InternalFirs調用接口Recordset15的 MoveFirst方法。
不難發(fā)現,TADOQuery.First最終是通過(guò)接口調用COM對象實(shí)現的。
l         Delphi與Windows 外殼
什么是Windows外殼呢?Windows外殼是Windows界面操作的環(huán)境,它還為我們編程提供了強大的可擴展性。我們利用Windows外殼實(shí)現某些功能的編程,稱(chēng)為外殼擴展。例如,如果你的機器上已經(jīng)裝了WinRAR,在文件夾的右鍵菜單就會(huì )看到WinRAR的壓縮菜單。這些功能就是通過(guò)Windows的外殼擴展實(shí)現的。
Windows外殼是基于COM的,所以所有的外殼擴展都要通過(guò)接口實(shí)現。Delphi也定義了很多外殼擴展接口,在Delphi7的安裝目錄下的Source\rtl\Win\ShlObj.pas單元中。
在Delphi的Demo目錄下的有一個(gè)Virtual Listview的例子,就是通過(guò)Windows外殼擴展實(shí)現磁盤(pán)瀏覽的,有興趣的讀者可以研究一下。
4 嵌入式匯編語(yǔ)言
在代碼中嵌入匯編語(yǔ)言也是Delphi的一大特色,如VCL的根類(lèi)Tobjce的實(shí)現就大量嵌入了匯編語(yǔ)句。
匯編語(yǔ)言是一種比較低級的計算機語(yǔ)言,與硬件的關(guān)系比較密切。所以我們在平時(shí)編程中盡量不要使用它,但是在某些特殊場(chǎng)合(如性能要求比較高、需要直接操縱硬件)下,使用它還是能發(fā)揮很大的作用的。
The end.
(如需要轉載,請注明出處及作者http://haitian.myrice.com)
huojiehai ( 2004-06-05)
我在這里只是證明給大家看delphi寫(xiě)程序的實(shí)質(zhì),讓初學(xué)者明白用delphi就是這么回事,如果讀者明白到這一點(diǎn),就達到了這寫(xiě)這篇文章的目的,我相信在學(xué)起相關(guān)的知識就會(huì )有目的了,就會(huì )知道該怎么學(xué)了。
本來(lái)是想多寫(xiě)些這樣的文章的,但是由于疾病的困擾,力不從心,所以......
我也希望自己能早日康復,大家都平平安安!
hunter_bobo ( 2004-06-04)
不錯,但如果能從編程思想上多做點(diǎn)解釋?zhuān)菢訒?huì )更好。
Shiyl ( 2004-05-26)
很不錯,雖然并未深入但是已經(jīng)可以讓初學(xué)者了解好多了。
海天兄,繼續:)
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
C、C++、API、SDK、IDE、VC++、MSDN、MFC、OWL、VCL、ATL 、BCB
脫離vcl的windows程序
Windows SDK
怎樣在VB中聲明和使用API函數
2021年開(kāi)發(fā)Python圖形用戶(hù)界面(GUI)的6種最佳Python GUI框架
玄虛出品Delphi教程的前言 good
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久