понедельник, 22 апреля 2013 г.

Как правильно сравнивать ссылки на интерфейсы

Чтобы корректно узнать - являются ли интерфейсы одним и тем же объектом надо действовать примерно так:


function l3IEQ(const I1, I2: IUnknown): Boolean;
  {-}
var
 iu1 : IUnknown;
 iu2 : IUnknown;
begin
 Result := (I1 = I2);
 if not Result AND (I1 <> nil) AND (I2 <> nil) then
 begin
  if Succeeded(I1.QueryInterface(IUnknown, iu1)) then
   try
    if Succeeded(I2.QueryInterface(IUnknown, iu2)) then
     try
      Result := (iu1 = iu2);
     finally
      iu2 := nil;
     end;//try..finally
   finally
    iu1 := nil;
   end;//try..finally
 end;//not Result..
end;


... тут будут тесты ....

Комментариев нет:

Отправить комментарий