Hallo,
ich bin ein Neuling in Sachen COM und habe folgende Fragen:
Woher weiss ich welche REFIID an einen QueryInterface-Aufruf zu übergeben ist, um einen bestimmten Schnittstellenzeiger zu erhalten?
Warum sind zwei COM-Objekte genau dann identisch, wenn ihre IUnkown-Schnittstellenzeiger identisch sind?
Wenn eine COM-Klasse CMyComImpl die Schnittstelle IMyInterface implementiert, dann könnte die Methode QueryInterface wie folgt aussehen:
CMyComImpl::QueryInterface(REFIID iid, void\*\* ppv)
{
if(ppv == (void\*\*) 0)
return E\_INVALIDARG;
if(IsEqualIID(iid, IID\_Unknown))
\*ppv = static\_cast (this);
else if(IsEqualIID(iid, IID\_IMyInterface))
\*ppv = static\_cast (this);
else
{
\*ppv = (IUnknown\*) 0;
return E\_NOINTERFACE;
}
(reinterpret\_cast (\*ppv))-\>AddRef();
return S\_OK;
}
Können die Schnittstellenzeiger zweier COM-Onjekte für IMyInterface nicht auch identisch sein?
Oder hat man sich auf IUnknown „geeinigt“ weil jede COM-Klasse dieses Interface unterstützen muss?
Vielen Dank für eine Antwort.
Gruß,
Tom