API(アプリケーションプログラミングインターフェイス)アプリケーションプログラミングインターフェイス。これは、すべてのコンピューター言語で使用する必要があります。 APIとは何ですか? APIは、プログラミングのほとんどがハードウェアを直接操作することはありませんが、オペレーティングシステムが直接操作することですより重要なことには、互換性の問題は、フィルタリングとハードウェアのテストです。したがって、プログラミング中にAPIを使用して機能を実装できる場合は、それらを使用しようとします。
l DelphiでWindows APIを使用する方法
毎日の開発作業では、Windows API関数を使用することがよくあるので、API関数はどこに存在しますか?この方法では、API関数がWindowsシステムによって提供されるDLLシステムファイルにカプセル化されていることを理解できます。たとえば、頻繁に使用するビープ手順は、windwosシステムディレクトリのuser32.dllでmessagebeepを呼び出すことで実装されます。 Delphitheは、最も頻繁に使用されるDLLです。Advapi32.dll、kernel32.dll、mpr.dll、version.dll、comctl32.dll、opengl32.dll、user32.dll、wintrust.dll、msimg32。
では、DelphiはこのAPI関数をどのように使用していますか? API関数はシステムDLLに存在するため、書いたDLLを呼び出すのと同じようにAPI関数を呼び出すことができます。 DLL関数を呼び出すには2つの方法があります。1つは静的方法、もう1つは動的方法です。 Windowsを呼び出すAPIはすべて静的です、なぜですか?これは、これらのDLLがオペレーティングシステムによって提供される最も基本的なサービスであり、オペレーティングシステムが開始時にメモリにロードされているためです。
L APIおよび毎日のプログラミング
Delphiは、ほとんどのWindows API関数(主にWindows.pasユニット)をカプセル化します。しかし、特別な要件がある場合は、Delphiによってカプセル化されていないAPIを呼び出す必要がある場合があり、Windowsによって公開されていないAPI関数を呼び出すこともあります。では、これらのAPI関数をどのように呼びますか?前述のように、静的メソッド呼び出しを使用してください。より詳細な電話については、関連情報を参照してください。
Delphiのこれらのカプセル化されていないAPI関数を呼び出す鍵は、パラメーターを知ることです。最新のMSDNまたは関連情報を確認できます。
L APIおよびVCL
MicrosoftのMFCには多数のカプセル化されたWindows APIがあり、VCLも例外ではありません。 VCL関数の実装のほとんどは、直接呼び出されるか、単にカプセル化されてから呼び出されたWindows APIから分離することはできません。たとえば、TControlの塗り直しの実装(コントロールユニット):
手順tcontrol.repaint;
var
DC:HDC;
始める
if(visibleまたは(csdesinging in componentState)およびnot(
controlStyle))および(親<> nil)でcsnodesignvisible
その後、parent.handleallocated
ControlStyleのCsopaqueの場合
始める
// DLLのGETDCは直接呼び出されます
DC:= getDC(parent.handle);
試す
// gdi32.dllのIntersectcliprectを直接呼び出します
IntersectClipRect(DC、左、上、左 +幅、トップ +
身長);
// parent.PaintControlsは多数のAPIを呼び出します
Parent.PaintControls(DC、Self);
ついに
// user32.dllのリリースを直接呼び出します
releasec(parent.handle、dc);
終わり;
ENSEを終了します
始める
//次の2つはカプセル化によって呼び出されます
無効;
アップデート;
終わり;
終わり;
VCLはどこにでもAPIがあることがわかります。VCLは、API機能を大量にカプセル化するクラスライブラリです。これらの迷惑なAPIパラメーターに注意してください。
comとは何ですか?コンポーネントオブジェクトモデルであるcom(コンポーネントオブジェクトモデル)は、異なる独立したオブジェクトがAPIのセットとバイナリ標準を定義することなく互いに通信できるようにするソフトウェアコンポーネントモデルです。この定義は比較的抽象化されています。これは、コンポーネントオブジェクトの仕様を定義するコンポーネントモデルです。 COMオブジェクトは、COMオブジェクトを介してアクセスできます。 COMオブジェクトの目的は、リソース共有を実現することです。そのため、さまざまなプログラミング言語で実装できます。 。
l vclとcom
comは、Microsoftが以前に強く称賛しているため、DelphiのVCLもWindows Comサービスを呼び出します。 Tcustomadodataset継承から、Tcustomadodatasetの定義は次のとおりです。
tcustomadodataset = class(tdataset、iunknown、
RecordSetEventsVt)
プライベート
frecordsetobject:_recordset;
ffindcursor:_recordset;
flookupcursor:_recordset;
Flockcursor:_Recordset;
Flowset:Irowset;
FACCERSER:iaccessor;
flowsetfind:irowsetfind;
FHACCERSER:Haccessor;
folerecbufsize:整数;
…
終わり;
ADO(Microsoft ActiveX Data Objects)、Microsoft OLE DBプロバイダーを介してデータベースにアクセスするCOMオブジェクトのコレクション。たとえば、Tadoqueryの最初の方法の実装プロセスを研究します。
tadoquery.first-> tdataset.first-> tdataset.internalfirst-> tcustomadodataset.internalfirst-> recordset15
タドキュリーはTcustomadodatasetから継承し、tcustomadodatasetはtdatasetから継承し、tdataset.internalfirstは仮想的な方法を定義し、サブクラスなtcustomadodataset.internalfirstを上書きします。 Tcustomadodataset。
Tadoquery.firstが最終的にcomオブジェクトを呼び出すインターフェイスを介して実装されることを見つけることは難しくありません。
L DelphiとWindowsシェル
Windowsシェルとは何ですか? Windowsシェルは、Windowsインターフェイス操作の環境であり、プログラミングの強力なスケーラビリティも提供します。 Windowsシェルを使用して、シェルエクステンションと呼ばれる特定の機能をプログラムします。たとえば、マシンにWinrarがインストールされている場合、フォルダーの右クリックメニューにWinrar圧縮メニューが表示されます。これらの関数は、Windowsシェルエクステンションを介して実装されます。
WindowsシェルはCOMベースであるため、すべてのシェル拡張機能をインターフェイスに実装する必要があります。 Delphiは、Delphi7インストールディレクトリのソース/RTL/WIN/SHLOBJ.PASユニットで、多くのシェルエクステンションインターフェイスを定義しています。
DelphiのDemo Directoryには、Windowsシェル拡張機能を介してディスクブラウジングを実現することができます。
コードにアセンブリ言語を埋め込むことも、Delphiの主要な機能です。たとえば、VCLのルートクラスTobjce Embed Assembly Statementの実装も大量に埋め込まれています。
アセンブリ言語は、ハードウェアに密接に関連する比較的低レベルのコンピューター言語です。したがって、私たちは毎日のプログラミングでそれを使用しないようにしますが、いくつかの特別な機会(高性能要件や直接のハードウェア操作など)では、それはまだ大きな役割を果たすことができます。
終わり。
(再版する必要がある場合は、ソースと著者にhttp://haitian.myrice.comを示してください)