|
|
Регистрация | << Правила форума >> | 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; |