HRESULT TxGetPropertySupportSite ( _PROPERTYSUPPORT_ENTRY* pEntries, LPCOLESTR pcKey, ITRiASPropertyCallback *pdefault, IUnknown *punk, ITRiASPropertyCallback **ppISite) { // versuchen diesen Eintrag zu finden _PROPERTYSUPPORT_ENTRY* pDefEntry = NULL; while (NULL != pEntries->dw) { if (pEntries->dwFlags & PROPERTYSUPPORT_DEFAULT) pDefEntry = pEntries; // DefaultEntry merken else if (NULL != pEntries->szKey && !wcscmp (pcKey, pEntries->szKey)) { if (SUCCEEDED(pEntries -> GetSupportObject (ppISite, punk))) // gefunden und erzeugt return S_OK; } pEntries++; } // nichts gefunden, Standard liefern if (NULL == pdefault && NULL == pDefEntry) return E_POINTER; // evtl. ist Default-CLSID gegeben if (NULL != pDefEntry && SUCCEEDED(pDefEntry -> GetDefaultSupportObject (pcKey, ppISite, punk))) return S_OK; // ansonsten gegebenes defaultobjekt verwenden _ASSERTE(NULL != pdefault); *ppISite = pdefault; LPUNKNOWN(*ppISite) -> AddRef(); return S_FALSE; // Standard geliefert }
_di_IUnknown __fastcall TComm::GetDunk() { _di_IUnknown diUnk; if (m_DefaultIntf) { IUnknownPtr punk = m_DefaultIntf; diUnk = LPUNKNOWN(punk); } return diUnk; }
// QueryInterface ist jetzt notwendig, da ein weiteres Interface unterstützt wird STDMETHODIMP CTextExt :: QueryInterface (REFIID riid, LPVOID *ppv) { // hier nur nach zusätzlichen Interfaces fragen if (riid == IID_IMaintainTexts) { *ppv = m_pTextPro; LPUNKNOWN (*ppv) -> AddRef(); return NOERROR; } // den Rest macht die BasisKlasse return CTriasExtension :: QueryInterface (riid, ppv); }
// da wir ein zusõtzliches Interface dazugenommen haben, mu_ ein modifiziertes // QueryInterface gegeben sein HRESULT CEDBSExtension::QueryInterface (REFIID riid, LPVOID *ppvObj) { if (riid == IID_IImportGeoData) *ppvObj = (IImportGeoData *)m_pImport; // ImportInterface liefern else if (riid == IID_IImportGeoDataSelectCS) *ppvObj = (IImportGeoDataSelectCS *)m_pImport; else // alles andere überlassen wir der BasisKlassse return CTriasExtension::QueryInterface (riid, ppvObj); // AddRef nicht vergessen LPUNKNOWN(*ppvObj) -> AddRef(); return NOERROR; }