Цитата: как можно можно переопределить метод _Release в TMyClass, чтобы при манипуляциях с IMyInterface вызывался именно он, а не TInterfacedObject._Release. Я думаю, не сможете,
[more=реальный класс с заглушкой _Release для отладки в XE2]
Через IUnknown я не пробовал с этим классом работать, нужды не было.
А через мои интерфейсы в XE2 в режиме сборки для отладки - внутрь соотв. методов ставятся брейкпойнты и срабатывают
Код: TZXMLSSave = class (TInterfacedObject, IZXMLSSave, IZXMLSSaveImpl)
protected
(* two functions below are implementors interface and should be
mandatory overrode and re-implemented *)
/// returns zero on success, according to original
/// description for SaveXmlssToEXML
///
/// tries to guess format by filename in the base class
function DoSave: integer; virtual;
class function FormatDescriptions: TStringDynArray; virtual;
public
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
/// Factory function. I wish it could be default class property.
/// Ancestors may chose to override it to return their instances.
class function From(const zxbook: TZEXMLSS): IzXMLSSave; virtual;
protected
constructor Create (const zxbook: TZEXMLSS); overload;
constructor Create (const zxsaver: TZXMLSSave); overload; virtual;
function ExportFormat(const fmt: string): iZXMLSSave;
function As_(const fmt: string): iZXMLSSave; //inline;
function ExportTo(const fname: TFileName): iZXMLSSave;
function To_(const fname: TFileName): iZXMLSSave; //inline;
..... другие методы по настройке или выполнению действия
protected
.......
{$IfOpt D+}
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
{$EndIf}
protected
class procedure RegisterFormat(const sv: CZXMLSSaveClass);
class procedure UnRegisterFormat(const sv: CZXMLSSaveClass);
public
class procedure Register;
class procedure UnRegister;
end;
.....
{$IfOpt D+}
// debug-only hooks for setting breakpoints
// and superwising lifetime of saving API-wrapping objects
function TZXMLSSave._AddRef: Integer; StdCall;
begin
Result := inherited _AddRef;
end;
function TZXMLSSave._Release: Integer; StdCall;
begin
Result := inherited _Release;
end;
{$EndIf}