COM schreibt vor, dass ein Objekt für IUnknown immer den selben Zeiger zurückgeben muss (damit die Identität geprüft werden kann).
Und ich gehe mal davon aus, dass Delphi sich mit seinem IInterface auch daran hält (was nicht für Quellen von dritten gelten muss).
ps: so in etwa (ungetestet)
Delphi-Quellcode:
function CompareInterface(AInterface1, AInterface2: IInterface): Integer;
var
Lhs: IInterface;
Rhs: IInterface;
begin
if Assigned(AInterface1) then
if Failed(AInterface1.QueryInterface(IInterface, Lhs)) then
Pointer(Lhs) := nil;
if Assigned(AInterface2) then
if Failed(AInterface2.QueryInterface(IInterface, Rhs)) then
Pointer(Rhs) := nil;
if PAnsiChar(Lhs) > PAnsiChar(Rhs) then
Result := 1
else if PAnsiChar(Lhs) < PAnsiChar(Rhs) then
Result := -1
else
Result := 0;
end;