Sto cercando di capire this example code in merito a Browser Helper Objects.Come funziona l'implementazione di più interfacce COM in C++?
All'interno, l'autore implementa una singola classe che espone più interfacce (IObjectWithSite, IDispatch).
La sua funzione QueryInterface esegue le seguenti:
if(riid == IID_IUnknown) *ppv = static_cast<BHO*>(this);
else if(riid == IID_IObjectWithSite) *ppv = static_cast<IObjectWithSite*>(this);
else if (riid == IID_IDispatch) *ppv = static_cast<IDispatch*>(this);
Ho imparato che da un punto di vista C, i puntatori di interfaccia sono solo dei rimandi a VTables. Quindi penso che C++ sia in grado di restituire il VTable di qualsiasi interfaccia implementata usando static_cast.
Ciò significa che una classe costruita in questo modo dispone di una serie di VTables in memoria (IObjectWithSite, IDispatch, ecc.)? Cosa fa C++ con il nome collisioni sulle diverse interfacce (ognuna ha una funzione QueryInterface, AddRef e Release), posso implementare metodi diversi per ognuna di queste?
Grazie! Ho fatto qualche lettura personale e ho scoperto che non solo crea VTables diversi, ma crea anche funzioni "thunk" per correggere il puntatore prima di reindirizzare alla funzione comune. – Martin