| 1.1 왜 인터페이스를 사용합니까? 예를 들어, 티켓 판매 서비스가 있습니다. 티켓 판매 서비스? 관리자조차도 티켓을 판매 할 수 있습니다. 이는 티켓 판매 서비스의 상속 구조에 관리자를 포함시키는 데 적합하지 않습니다. 따라서 티켓 판매 서비스는 영화관, 오페라 하우스 및 기타 서비스가 그러한 서비스 정의를 따르는 한 인터페이스입니다. 1.2 델파이에서 인터페이스를 사용하는 방법 | | 1.2.1 인터페이스 선언 imiinterface = interface (iiinterface) // 지침 (1) [ '{63e072df-b81e-4734-b3cb-3c23c7fda8ea}'] // 지침 (2) 함수 getName ( const str : string) : String ; 기능 쿼리 린터 ( const iid ) ; 함수 _RELEASE : Integer ; END ; 설명 (1) : 지속적인 관계가있는 경우 괄호 안에 부모 인터페이스를 채우십시오. 그렇지 않으면 Imyinterface = 인터페이스와 같은 저장하십시오. 참고 (2) :이 안내서는 COM 특성과의 인터페이스를 구현하려면 델파이의 인터페이스를 추가해야합니다. 인터페이스 메소드의 정의와 같은 런타임, 메소드 매개 변수 정의가 자세히 설명 될 수 있습니다. 참고 (3) : 인터페이스는이 세 가지 기능을 구현해야합니다. 1.2.2 인터페이스 구현 인터페이스 서비스는 클래스별로 구현됩니다. tintfclass = 클래스 (Tobject, imyinterface) Privatefcounter : Integer; Frefcount; PublicFunction QueryInterface (const IID : tguid; out obj) : hresult; 1.2.3 사용 유형 변환. 예를 들면 : var aintf : imyinterface; beginaobj : = tintfclass.create; tryaintf : = (imiinterface (aobj); ... b. 델파이 컴파일러의 내장 메커니즘을 사용하십시오. 예 : Aintf : = aobj.c. Queryinterface를 사용하십시오. 인터페이스는 Iinterface에서 명시 적으로 지정되어야합니다. 인터페이스 상속 2. Delphi7의 안내 값이 있어야하는 구현 클래스는 Tintfclass = class (tinterfacedObject, imyinterface)와 같은 TinterfacedObject에서 상속되어야합니다. Delphi는 사용 후 릴리스 코드가 릴리스되지 않고 다음 코드 와 같은 문제를 일으킨다. = tintfcrate . aintf . NIL은 인터페이스에 설정되며 FreeAndnil (AOBJ)은 AINTF가 다시 해제되며 AINTF 가이 문제를 해결하기 위해 객체의 수명을 방해하지 마십시오 , 당신은 release : release; interlockeddecrement (frefcount); 클래스 객체 위임. 객체 인터페이스 대표단, 이미 인터페이스 정의가있는 경우 : iimplinterface = interface (iiinterface) convertTound (const intd : integer) : double; function convertTormb (const intd : integer) : double; 인터페이스를 구현하십시오 : timplclass = class (tobject, iimplinterface) private frefcount : public function convertTound (const intd : integer) : double; eendationfunction timplclass.queryinterface (const iid : tguid; out abj) : hresult; getInterface (iid, obj)를 시작하면 결과 : = 0 else 결과 : = e_nointerface; end; function timplclass._Release : INTEGER; 이제 iimplinterface 인터페이스를 구현하기위한 TintfserviceClass가 있습니다 클래스 객체 , 공공 건설자는 과부하; 물체로 위임되었습니다. 구현은 다음과 같습니다. 생성자 tintfserviceclass.create; . End; Destructor TintfServiceClass.destroy; 인터페이스 GOG 포인터는 인터페이스의 VMT -72 변위 및 rttidelphi : vmtintftable = -72에서 정의됩니다. 관련 기능 : getInterFaceCount; // 인터페이스 수를 얻습니다. getinterfacetable; // 인터페이스 테이블을 가져옵니다. 관련 구조 : tinterfaceentry = packed recordiid : tguid; vtable : 포인터; ioffset : integer; integer : integer; end; pinterfacetable = ^tinterfacetable; tinterfacetable = packed RecordentRycount : 정수; 항목 [0..999] Tinterfaceentry; 끝; 자기는 VMT 포인터에 대한 포인터입니다. self.getInterFacetable.EntRyCount는 다음과 같습니다. 선언의 지침, RTTI 정보는 다음과 같이 델파이에서 컴파일 된 프로그램에 추가 될 수 있습니다. = recordName; // 인터페이스 이름 UnitName; // 인터페이스 MDA에 의해 선언 된 프로그램 단위 이름 : // 메소드 정보를 인터페이스에 저장하는 동적 배열 IID : // 인터페이스 정보 : ptypeinfo; // 인터페이스 정보 ancinfo; // ptypeinfo; // pointer parent inforation numanc; // 부모 인터페이스 끝에서 상속 된 메소드 수는 다음과 같이 정의됩니다 , CCPASCAL, CCSTDCALL, CCSAFECALL); TINTFMETHENTRY = RECORDNAME : // 메소드 이름 CC : TCALLCONV; // 정수 위치; ptypeinfo; // 메소드 백 패스 유형 selfinfo : ptypeinfo; // 메소드 자체를 설명하는 메소드 정보 포인터의 정보 포인터를 설명합니다. RTTI 정보의 가치 끝; 유형 정보의 형식 끝; |
|