API (응용 프로그램 프로그래밍 인터페이스) 응용 프로그램 프로그래밍 인터페이스. 모든 컴퓨터 언어로 사용해야합니다. API 란 무엇입니까? API는 운영 체제가 제공하는 서비스를 사용하는 방법입니다. 대부분의 프로그래밍은 하드웨어를 직접 운영하지 않으며 운영 체제는 하드웨어를 직접 작동합니다 테스트 필터링 및 하드웨어 프로그래밍시 더 중요한 것은 운영 체제 계층에서 코드 공유를 구현하는 것입니다. 따라서 프로그래밍 중에 API를 사용하여 기능을 구현할 수 있다면 기능을 사용하려고합니다.
l 델파이에서 Windows API를 사용하는 방법
매일 개발 작업에서는 종종 Windows API 기능을 사용하므로 API 기능은 어디에 존재합니까? Windows 시스템에서 제공 한 DLL 시스템 파일에 API 함수가 캡슐화된다는 것을 이러한 방식으로 이해할 수 있습니다. 예를 들어, 우리가 자주 사용하는 경고음 절차는 Windwos 시스템 디렉토리에서 user32.dll에서 MessageBeep을 호출하여 구현됩니다. Delphithe는 가장 자주 사용되는 DLL이 다음과 같습니다.
그렇다면 Delphi는이 API 기능을 어떻게 사용합니까? API 함수는 시스템 DLL에 존재하므로 우리가 쓴 DLL을 호출하는 것처럼 API 기능을 호출 할 수 있습니다. DLL 함수를 호출하는 두 가지 방법이 있습니다. 하나는 정적 메소드이고 다른 하나는 동적 방법입니다. Windows를 호출하는 API는 모두 정적 인 이유는 무엇입니까? 이 DLL은 운영 체제가 제공하는 가장 기본적인 서비스이기 때문에 운영 체제는이를 대량으로 사용합니다.
L API 및 일일 프로그래밍
Delphi는 대부분의 Windows API 기능 (주로 Windows.Pas 단위)을 캡슐화합니다. 대부분의 작업을 수행 할 수 있어야합니다. 그러나 때로는 특별한 요구 사항이있을 때 델파이가 캡슐화하지 않은 일부 API를 호출해야 할 수도 있고 때로는 Windows에서 게시되지 않은 API 기능을 호출해야 할 수도 있습니다. 그렇다면이 API 기능을 어떻게 호출합니까? 앞에서 언급했듯이 정적 메소드 호출 만 사용하십시오. 자세한 내용은 관련 정보를 참조하십시오.
델파이의 캡슐화되지 않은 API 기능을 호출하는 핵심은 매개 변수를 아는 것입니다. 최신 MSDN 또는 관련 정보를 확인할 수 있습니다.
L API 및 VCL
Microsoft의 MFC에는 많은 수의 캡슐화 된 Windows API가 있으며 VCL은 예외는 아닙니다. VCL 함수의 구현의 대부분은 Windows API에서 분리 할 수 없으며 직접 호출되거나 단순히 캡슐화 된 다음 호출됩니다. 예를 들어, TCONTROL의 Repaint (제어 장치)의 구현 :
절차 tcontrol.repaint;
var
DC : HDC;
시작하다
if (Visible 또는 (componentState에서 csdesigning)가 아님 (
controlstyle)) 및 (부모 <> nil) 및
그런 다음 부모
컨트롤 스타일의 csopaque라면
시작하다
// dll의 getdc는 직접 호출됩니다
DC : = getdc (parent.handle);
노력하다
// 직접 gdi32.dll 's intersectCliprect를 호출합니다
interectCliprect (DC, 왼쪽, 상단, 왼쪽 + 너비, 상단 +
키);
// parent.paintControls는 많은 API를 호출합니다
parent.paintcontrols (dc, self);
마지막으로
// 직접 user32.dll의 releasec를 호출합니다
릴리스 C (Parent.Handle, DC);
끝;
다른 끝
시작하다
// 다음 두 가지는 캡슐화로 호출됩니다
무효화;
업데이트;
끝;
끝;
VCL에는 API가 있습니다. VCL은 API 기능을 대량으로 캡슐화하는 클래스 라이브러리입니다. 성가신 API 매개 변수에주의하십시오.
com이란 무엇입니까? Component Object 모델 인 Component Object Model은 다른 독립 객체가 컴퓨팅 언어 제약 조건없이 서로 통신 할 수있는 소프트웨어 구성 요소 모델입니다. 이 정의는 비교적 추상적입니다. 우선,이 COM 모델을 구현하는 객체를 정의하는 구성 요소 모델입니다. COM 객체는 하나 이상의 인터페이스를 포함하여 COM 객체의 기능에 액세스 할 수 있습니다. COM 객체의 목적은 자원 공유를 실현하는 것입니다. 이는 이진 코드 수준에서 공유를 구현하거나 다른 프로그래밍 언어로 호출 할 수 있습니다. DLL).
L VCL 및 COM
Com은 Microsoft가 이전에 강력하게 칭찬했기 때문에 Windows 운영 체제의 모든 곳에서는 Windows Com 서비스를 호출합니다. tcustomadodataset에서 나온 것입니다. tcustomadodataset의 정의는 다음과 같습니다.
tcustomadodataset = class (tdataset, iunknown,
RecordesTeventsvt)
사적인
frecordsetObject : _recordset;
ffindcursor : _recordset;
flookupcursor : _recordset;
Flockcursor : _recordset;
Frowset : Irowset;
FACCESSOR : IACCESSOR;
Frowsetfind : Irowsetfind;
Fhaccessor : Haccessor;
Folerecbufsize : 정수;
…
끝;
Microsoft Ole DB 제공 업체를 통해 데이터베이스에 액세스하는 COM 개체 모음 인 ADO (Microsoft ActiveX Data Objects). 예를 들어 TadoQuery의 첫 번째 방법의 구현 프로세스를 연구합니다.
TadoQuery.first-> tdataset.first-> tdataset.internalfirst-> tcustomadodataset.internalfirst-> Recordset15
TadoQuery는 tcustomadodataset에서 물려 받고 tcustomadodataset는 tdataset, tdataset.internalfirst에서 상속됩니다. Internalfirst는 가상 메소드를 정의하고 서브 클래스 Tcustomadodataset.internalfirst는 그것을 우선합니다. tcustomadodataset. Internalfirs는 인터페이스의 이동 방법을 호출합니다.
TadoQuery.first가 궁극적으로 COM 객체를 호출하는 인터페이스를 통해 구현된다는 것을 찾는 것은 어렵지 않습니다.
l 델파이와 윈도우 쉘
Windows 쉘이란 무엇입니까? Windows Shell은 Windows 인터페이스 작동을위한 환경이며 프로그래밍을위한 강력한 확장 성을 제공합니다. Windows Shells를 사용하여 Shell Extensions라는 특정 기능을 프로그래밍합니다. 예를 들어, 컴퓨터에 Winrar가 설치된 경우 폴더의 마우스 오른쪽 버튼 클릭 메뉴에 Winrar 압축 메뉴가 표시됩니다. 이러한 기능은 Windows Shell Extensions를 통해 구현됩니다.
Windows Shell은 COM 기반이므로 모든 쉘 확장은 인터페이스를 통해 구현해야합니다. Delphi는 또한 Delphi7 설치 디렉토리의 소스/rtl/win/shlobj.pas 단위의 많은 쉘 확장 인터페이스를 정의합니다.
Delphi의 Demo 디렉토리에는 Windows Shell Extensions를 통해 디스크 브라우징을 실현하는 Virtual ListView의 예가 있습니다.
코드에 어셈블리 언어를 포함시키는 것은 델파이의 주요 특징으로, VCL 클래스 Tobjce는 대량으로 구현된다.
어셈블리 언어는 하드웨어와 밀접한 관련이있는 상대적으로 낮은 수준의 컴퓨터 언어입니다. 따라서 우리는 매일 프로그래밍에 사용하지 않으려 고 노력하지만, 특별한 경우 (예 : 고성능 요구 사항 및 직접 하드웨어 조작)는 여전히 큰 역할을 할 수 있습니다.
끝.
(재 인쇄가 필요한 경우 소스와 저자를 표시하십시오 http://heaitian.myrice.com).