tw6690.pp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. program inheritedcorba;
  2. {$mode objfpc}{$h+}
  3. uses
  4. typinfo;
  5. type
  6. {$interfaces corba}
  7. iinterface1 = interface
  8. procedure proc1;
  9. end;
  10. {$interfaces com}
  11. iinterface2 = interface
  12. procedure proc2;
  13. end;
  14. iinterface3 = interface(iinterface1)
  15. procedure proc3;
  16. end;
  17. iinterface4 = interface(iinterface2)
  18. procedure proc4;
  19. end;
  20. {$interfaces corba}
  21. iinterface5 = interface(iinterface1)
  22. procedure proc5;
  23. end;
  24. iinterface6 = interface(iinterface2)
  25. procedure proc6;
  26. end;
  27. tclass1 = class(iinterface1)
  28. public
  29. procedure proc1;
  30. end;
  31. {tclass6 = class(iinterface6)
  32. public
  33. procedure proc6;
  34. end;
  35. }
  36. { does not compile because it is com style interface:
  37. inheritedcorba.pas(36,12) Error: No matching implementation for
  38. interface method "IUnknown.QueryInterface(const TGuid,out <Formal type>):
  39. LongInt;StdCall" found ...
  40. }
  41. procedure writeinterfacetype(po: ptypeinfo);
  42. begin
  43. case po^.kind of
  44. tkinterfaceraw: if (po^.name<>'iinterface1') and
  45. (po^.name<>'iinterface3') and
  46. (po^.name<>'iinterface5') then
  47. halt(1);
  48. tkinterface: if (po^.name<>'iinterface2') and
  49. (po^.name<>'iinterface4') and
  50. (po^.name<>'iinterface6') then
  51. halt(1);
  52. else
  53. halt(1);
  54. end;
  55. end;
  56. { tclass1 }
  57. procedure tclass1.proc1;
  58. begin
  59. end;
  60. begin
  61. writeinterfacetype(typeinfo(iinterface1));
  62. writeinterfacetype(typeinfo(iinterface2));
  63. writeinterfacetype(typeinfo(iinterface3));
  64. writeinterfacetype(typeinfo(iinterface4));
  65. writeinterfacetype(typeinfo(iinterface5));
  66. writeinterfacetype(typeinfo(iinterface6));
  67. writeln('ok');
  68. end.