uw22741b.pp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. unit uw22741b;
  2. {$mode objfpc}
  3. interface
  4. type
  5. iBase = interface
  6. function getSelf: tObject;
  7. end;
  8. tInterfaceObject= class(tObject, iBase)
  9. public
  10. function getSelf: tObject;
  11. function queryInterface({$IFDEF FPC_HAS_CONSTREF}constRef{$ELSE}const{$ENDIF} iid: tGuid; out obj): longint; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; virtual;
  12. function _addRef: longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; virtual;
  13. function _release: longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; virtual;
  14. end;
  15. implementation
  16. function tInterfaceObject.getSelf: tObject;
  17. begin
  18. result:= self;
  19. end;
  20. function tInterfaceObject.queryInterface({$IFDEF FPC_HAS_CONSTREF}constRef{$ELSE}const{$ENDIF} iid: tGuid; out obj): longint; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
  21. begin
  22. if getInterface(iId, obj) then
  23. result:= S_OK
  24. else
  25. result:= longint(E_NOINTERFACE);
  26. end;
  27. function tInterfaceObject._addRef: longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
  28. begin
  29. result:= 1;
  30. end;
  31. function tInterfaceObject._release: longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
  32. begin
  33. result:= 1;
  34. end;
  35. end.