Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Project1;
- {$mode objfpc}{$H+}
- type
- IChainer = interface['{07515829-4A17-463B-8E34-6AEA42CC9C3F}']
- function Chain: IChainer; stdcall;
- procedure Done; stdcall;
- end;
- TChainer = class(TInterfacedObject, IChainer)
- function _AddRef: longint; stdcall;
- function _Release: longint; stdcall;
- function Chain: IChainer; stdcall;
- procedure Done; stdcall;
- end;
- { TChainer }
- function TChainer._AddRef: longint; stdcall;
- begin
- Result:=inherited _AddRef;
- Writeln('Addref: ',HexStr(Pointer(Self)),' Refcount: ',RefCount,' at ',hexstr(get_caller_addr(get_frame)));
- end;
- function TChainer._Release: longint; stdcall;
- begin
- Writeln('Release: ',HexStr(Pointer(Self)),' Refcount: ',RefCount,' at ',hexstr(get_caller_addr(get_frame)));
- Result:=inherited _Release;
- end;
- function TChainer.Chain: IChainer; stdcall;
- begin
- Writeln('Chain: ',HexStr(Pointer(Self)));
- Result:= Self as IChainer;
- end;
- procedure TChainer.Done; stdcall;
- begin
- Writeln('Done: ',HexStr(Pointer(Self)));
- end;
- function GetChainer:IChainer;
- begin
- Result:= TChainer.Create as IChainer;
- end;
- procedure Test;
- begin
- GetChainer.
- Chain.
- Chain.
- Done;
- Writeln('fin');
- end;
- begin
- Test;
- Readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment