![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Как я понял, методу _Release нельзя сделать override, т.к. он stdcall. Речь идет не о последней ссылке, т.е. объект в памяти продолжает существовать.
|
|
#2
|
|||
|
|||
|
Если правильно помню, то там есть то-ли функция, то-ли свойстыво RefCount. просто читай его.
|
|
#3
|
|||
|
|||
|
методу _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; |