| 
       Multiple interfaces  | 
    Top Previous Next | 
| 
 What is translated > Types > Records, Classes, Interfaces > Multiple interfaces In Delphi a class can be derived from multiple interfaces. Interfaces in last instance have to be derived from IInterface, which in Delphi is the same as IUnknown, C++ however uses IUnknown from MS Windows, which has the abstract methods: AddRef, Release and QueryInterface. In Delphi analogous methods are defined automatically, when a class is derived from Delphi's IInterface (=IUnknown). In C++ however, the implementations have to be defined explicitly. Therefore a macro is inserted into class declaration: 
 #define INTFOBJECT_IMPL_IUNKNOWN(BASE) \ ULONG __stdcall AddRef() { return BASE::AddRef();} \ ULONG __stdcall Release(){ return BASE::Release();} \ HRESULT __stdcall QueryInterface(REFIID iid, void** p){ return BASE::QueryInterface(iid, p);} 
 An class declaration then for example looks like: 
 class TCar : public System::TInterfacedObject, public IRecyclable { public: INTFOBJECT_IMPL_IUNKNOWN(System::TInterfacedObject) ... 
 
 More details to this subject can be found here: 
 http://docwiki.embarcadero.com/RADStudio/Rio/en/Inheritance_and_Interfaces 
  | 
| 
       This page belongs to the DelphiXE2Cpp11 Documentation  | 
    DelphiXE2Cpp11 home Content |