亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

Delphi背后---初學者參考之二(2)

2019-11-18 18:22:45
字體:
來源:轉載
供稿:網友

(續Delphi背后---初學者參考之二(1) )

2 Windows API

APIapplication PRogramming Interface)應用編程接口,所有的計算機語言都要用到它。API是什么?API是程序使用操作系統提供的服務的一個途徑,我們大多數的編程都不直接操作硬件,而是調用這些API,再由操作系統直接操作硬件,這樣的好處是我們編程時不必考濾與硬件兼容的問題,更重要的是從操作系統層實現了代碼共享。所以,在編程時如果能用API實現的功能,我們盡量用它。

l         Delphi如何使用Windows API

在日常開發工作中,我們經常要使用Windows API函數,那么API函存在在哪里呢?我們可以這樣理解,API函數就是封裝在Windows系統提供的DLL系統文件中。如我們經常使用的Beep過程(響鈴),就是調用Windwos系統目錄下的user32.dll中的MessageBeep實現的;SendMessage(發消息)就是直接調用user32.dllSendMessageA。Delphi使用頻率最多的Dll是:advapi32.dll、kernel32.dll、mpr.dll、version.dllcomctl32.dll、gdi32.dll、opengl32.dll、user32.dll、wintrust.dllmsimg32.dll。

那么Delphi是如何使用這API函數的呢?既然API函數存在于系統的DLL中,那么我們就可以像調用自己寫的DLL一樣調用API函數啦。調用DLL函數有兩種方式,一種是靜態方式,一種是動態方式。調用WindowsAPI都是采用靜態方式,為什么呢?這是因為這些DLL是操作系統提供的最基本服務,操作系統在啟動時就已經加載到內存中了,并且操作系統也大量的使用他們。

 

l         API與日常編程

Delphi封裝了Windows的大部分API函數(主要在Windows.pas單元中),應該說可以完成我們的大部分工作,我們一般不直接調用API函數。但有時有特別要求時,我們可能就要調用一些Delphi沒封裝過的API,有時甚至會調用Windows沒公布的API函數。那么如何調用這些API函數呢?就像前面說的,使用靜態方法調用就好了。更詳細的調用請參看相關的資料。

調用這些Delphi沒封裝的API函數關鍵是要知道參數。可以查閱看最新的MSDN或相關的資料。

l         API與VCL

MicrosoftMFC大量的封裝地Windows API,VCL也不例外。VCL功能的實現大部分都離不開Windows API,要么是直接調用,要么是經過簡單的封裝再調用。如TControlRepaint的實現(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.DllGetDC

      DC := GetDC(Parent.Handle);

      Try

        //直接調用gdi32.DllIntersectClipRect

        IntersectClipRect(DC, Left, Top, Left + Width, Top +

Height);

                // Parent.PaintControls調用大量的API

        Parent.PaintControls(DC, Self);

      Finally

// 直接調用user32.DllReleaseDC

        ReleaseDC(Parent.Handle, DC);

      end;

    end else

    begin

      //以下兩個經過封裝調用

      Invalidate;

      Update;

    end;

end;

可見VCL中處處都有API,我們從另外一個面來理解VCL就是:VCL就是大量封裝API函數的類庫,這樣的結果就是使我們更容易使用API,不必關心那些煩人的API參數。

 

3 DelphiWindwos COM服務

COM是什么東西?COMComponent Object Model),組件對象模型,它是基于Windows平臺的讓不同的獨立對象能相互通訊的不受任何計算語言約束的軟件組件模型,它定義一組API和一個二進制標準。這個定義比較抽象,首先它是一種組件模型,定義了一種組件對象規范,實現這個COM模型的對象就是COM對象。COM對象是通過接口(Interface)來實現訪問的,一個COM對象可以包含一個或多個接口,這些接口構成了COM對象的功能,你可以像訪問VCL對象方法一樣訪問COM對象的接口方法。COM對象的目的是實現資源共享,它在二進制代碼級別實現了共享,所以它可以用不同的編程語言來實現,也可以由不同的編程語言來調用,這類似于DLL(其實COM的思想來源來DLL)。

l         VCL與COM

COMMicrosoft以前極力推崇的東西,所以在Windows操作系統中無處不在,同樣DelphiVCL也有調用Windows COM服務的,最明顯例子就是組件欄ADO頁的所有ADO組件,如TADOQuery,它是從TCustomADODataSet繼承下來的,而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),它是一組通過Microsoft OLE DB 提供者訪問數據庫COM對象的集合。如我們研究一下TADOQueryFirst方法的實現過程:

TADOQuery.First->TDataSet.First->TdataSet.InternalFirst-> TCustomADODataSet. InternalFirst ->Recordset15. MoveFirst

TADOQueryTCustomADODataSet繼承,而TCustomADODataSetTdataSet繼承,TdataSet.InternalFirst定義的是虛方法,而子類TCustomADODataSet. InternalFirst覆蓋了它。TCustomADODataSet. InternalFirs調用接口Recordset15 MoveFirst方法。

不難發現,TADOQuery.First最終是通過接口調用COM對象實現的。

 

l         Delphi與Windows 外殼

什么是Windows外殼呢?Windows外殼是Windows界面操作的環境,它還為我們編程提供了強大的可擴展性。我們利用Windows外殼實現某些功能的編程,稱為外殼擴展。例如,如果你的機器上已經裝了WinRAR,在文件夾的右鍵菜單就會看到WinRAR的壓縮菜單。這些功能就是通過Windows的外殼擴展實現的。

Windows外殼是基于COM的,所以所有的外殼擴展都要通過接口實現。Delphi也定義了很多外殼擴展接口,在Delphi7的安裝目錄下的Source/rtl/Win/ShlObj.pas單元中。

DelphiDemo目錄下的有一個Virtual Listview的例子,就是通過Windows外殼擴展實現磁盤瀏覽的,有興趣的讀者可以研究一下。

4 嵌入式匯編語言

在代碼中嵌入匯編語言也是Delphi的一大特色,如VCL的根類Tobjce的實現就大量嵌入了匯編語句。

匯編語言是一種比較低級的計算機語言,與硬件的關系比較密切。所以我們在平時編程中盡量不要使用它,但是在某些特殊場合(如性能要求比較高、需要直接操縱硬件)下,使用它還是能發揮很大的作用的。

      

 

                                                            The end.

 

(如需要轉載,請注明出處及作者http://haitian.myrice.com)


上一篇:delphi連接數據庫淺談

下一篇:在Delphi7中調試COM+

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美国产日韩天堂区| 国产精品露脸av在线| 这里只有精品视频| 欧美国产在线视频| 亚洲自拍偷拍网址| 欧美性猛交xxxx乱大交| 国产亚洲一区二区在线| 91av视频在线观看| 日韩精品在线视频观看| 久久视频在线直播| 中文字幕欧美日韩va免费视频| 欧美日韩亚洲一区二区三区| 久久免费视频在线观看| 中文字幕在线看视频国产欧美在线看完整| 久久精品视频导航| 日韩经典一区二区三区| 亚洲跨种族黑人xxx| 亚洲国模精品一区| 日韩中文在线视频| 色七七影院综合| 国产精品无av码在线观看| 久久视频中文字幕| 亚洲精品国产精品国自产观看浪潮| 欧美激情精品久久久久久变态| 亚洲欧美制服另类日韩| 大量国产精品视频| 欧美性资源免费| 国产精品白嫩美女在线观看| www.日韩av.com| 久久久99免费视频| 成人在线一区二区| 黑人精品xxx一区一二区| 亚洲最大av在线| 日韩高清av在线| 久久久久久久爱| 日本三级韩国三级久久| 日本中文字幕不卡免费| 久久视频国产精品免费视频在线| 国产午夜精品全部视频播放| 国产成人拍精品视频午夜网站| 欧美性黄网官网| 国语自产精品视频在免费| 91成人国产在线观看| 日韩av综合中文字幕| 中文字幕亚洲欧美日韩高清| 久久亚洲国产成人| 91精品国产综合久久久久久久久| 亚洲综合在线播放| 欧美精品videosex极品1| 97精品在线观看| 国产精品日韩欧美大师| 国产欧美日韩专区发布| 尤物tv国产一区| 国产97人人超碰caoprom| 欧美日韩国产精品一区二区不卡中文| 亚洲国产中文字幕在线观看| 欧美精品成人91久久久久久久| 一道本无吗dⅴd在线播放一区| 国产91免费观看| 国产精品入口尤物| 亚洲欧洲视频在线| 国内成人精品一区| 精品女同一区二区三区在线播放| 亚洲一区二区自拍| 黑人极品videos精品欧美裸| 欧美在线性爱视频| 深夜福利一区二区| 中文字幕在线观看亚洲| 亚洲国产精品中文| 日韩av不卡电影| 欧美在线性视频| 亚洲国产精品视频在线观看| 国产丝袜一区二区| 精品久久久久久国产| 亚洲丁香婷深爱综合| 久久久亚洲网站| www.99久久热国产日韩欧美.com| 欧美精品aaa| 亚洲另类图片色| 国产精品日韩在线| 国产亚洲精品久久久优势| 国内精品伊人久久| 成人免费黄色网| 欧美在线国产精品| 日韩精品在线播放| 欧美激情高清视频| 日本老师69xxx| 精品免费在线视频| 亚洲电影免费观看高清完整版在线| 91高潮精品免费porn| 国产伦精品免费视频| 亚洲一区二区久久久| 亚洲黄色有码视频| 久久久精品久久久久| 美女国内精品自产拍在线播放| 日韩欧美中文免费| 日韩成人av一区| 成人国产亚洲精品a区天堂华泰| 国产精品久久久久久久av电影| 日韩精品在线看| 成人欧美在线观看| 伊人久久久久久久久久| 日韩av在线网| 欧美成人免费全部观看天天性色| 国产精品视频专区| 欧美性猛交视频| 亚洲欧美制服丝袜| 国产一区二区三区中文| 久久中国妇女中文字幕| 国产精品福利片| 亚洲美女久久久| 久久夜色撩人精品| 国产视频久久久久久久| 欧美精品福利视频| 日韩二区三区在线| 欧美久久精品一级黑人c片| 国产精品成人一区| 97香蕉久久夜色精品国产| 亚洲国产精彩中文乱码av| 亚洲精品小视频在线观看| 欧美放荡办公室videos4k| 亚洲电影免费观看高清完整版| 日韩一区二区三区国产| 精品一区二区亚洲| 久久这里有精品视频| 中文字幕无线精品亚洲乱码一区| 激情久久av一区av二区av三区| 日韩一区二区精品视频| 日韩av在线一区| 色妞一区二区三区| 2020欧美日韩在线视频| 98午夜经典影视| 国产成人啪精品视频免费网| 国产丝袜一区二区三区| 日本一区二区在线播放| 久久久国产精品x99av| 国产欧美最新羞羞视频在线观看| 国产精品高潮呻吟视频| 26uuu亚洲伊人春色| 日韩高清免费观看| 国产精品久久电影观看| 亚洲乱码国产乱码精品精天堂| 国产男女猛烈无遮挡91| 久久福利视频导航| 欧美激情第一页xxx| 亚洲国产成人精品电影| 精品人伦一区二区三区蜜桃网站| 国产精品欧美一区二区| 亚洲免费电影一区| 黑人欧美xxxx| 国产成人鲁鲁免费视频a| 黑人精品xxx一区一二区| 国产精品露脸av在线| 国产欧美精品xxxx另类| 欧美性猛交xxxx免费看漫画| 国产成人免费91av在线| 久色乳综合思思在线视频| 国产精品久久久久久久久久久久久| 久久久久久久久久久91| 日韩av手机在线看| 日韩大胆人体377p| 国产欧美日韩免费| 亚洲国产精品va在线看黑人动漫| 欧美国产日韩一区|