Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Interface referenzen auf gleichheit prüfen?

  Alt 11. Okt 2004, 17:50
Ja und, schau dir obigen Code mal genaur an

Delphi-Quellcode:
function Compare(const A,B: IInterface): Boolean;
var
  AI,BI: IImpelementor;
begin
  Result := (A.QueryInterface(AI, IImplementor) = H_OK) and
            (B.QueryInterface(BI, IImplementor) = H_OK) and
            (AI.Object.ClassType = BI.Object.ClassType);
end;
vergleicht die Klassen, und daraus wird

Delphi-Quellcode:
function Compare(const A,B: IInterface): Boolean;
var
  AI,BI: IImpelementor;
begin
  Result := (A.QueryInterface(AI, IImplementor) = H_OK) and
            (B.QueryInterface(BI, IImplementor) = H_OK) and
            (AI.Object = BI.Object);
end;
um die zu implementierenden Objecte zu vergleichen. Bei TRUE wird das Interface in A und B durch das selbe Object implementiert, ergo A und B stellen das selbe Object dar, auch WENN eben Pointer(A) == Pointer(B) FALSE ist. Ich hätte gedacht das nach dem Studium meines obigen Postings das eigentlich trivial ist und jeder das so ableiten kann.

Da wir das absichtlich so konstruiert haben muß das funktionioren, es basiert also nicht auf undokumentierten Annahmen wie Delphis Compiler intern was macht.

Gruß Hagen
  Mit Zitat antworten Zitat