Показать сообщение отдельно
  #3  
Старый 24.11.2010, 11:28
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

методу _Release нельзя сделать override не потому, что он stdcall, а потому, что он не виртуальный.

В Вашем случае надо делать так

Код:
type
  TMyClass = class(TInterfacedObject,// или как там у Вас
                          IUnknown, // обязательно
                          IInterface1,
                          IInterface2,
                             ...
                          IInterfacen)
  protected // обязательно обьявить эти три процедуры
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
  ... // далее по тексту
end;

// и в блоке implementation

function TMyClass .QueryInterface(const IID: TGUID; out Obj): HResult;
begin
  Result := inherited QueryInterface(IID,Obj);
end;

function TMyClass ._AddRef: Integer;
begin
  Result := inherited _AddRef;
end;

function TMyClass ._Release: Integer;
begin
  // здесь делаем дополнительные проверки
  Result := inherited   _Release
end;
Ответить с цитированием