Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Eine intelligente Zeigerklasse zum Verwalten von COM-Schnittstellenzeigern.
Syntax
template<class T>
class CComPtr
Parameter
T
Eine COM-Schnittstelle, die den zu speichernden Zeigertyp angibt.
Member
Öffentliche Konstruktoren
| Name | Beschreibung |
|---|---|
CComPtr::CComPtr |
Der Konstruktor. |
Öffentliche Operatoren
| Name | Beschreibung |
|---|---|
CComPtr::operator = |
Weist dem Memberzeiger einen Zeiger zu. |
Hinweise
ATL verwendet CComPtr und CComQIPtr verwaltet COM-Schnittstellenzeiger. Beide werden abgeleitet CComPtrBase, und beide führen die automatische Verweiszählung aus.
Mit den CComPtr Klassen CComQIPtr können Speicherverluste beseitigt werden, indem automatische Verweiszählungen ausgeführt werden. Die folgenden Funktionen führen beide die gleichen logischen Vorgänge aus. Die zweite Version kann jedoch weniger fehleranfällig sein, da sie die CComPtr Klasse verwendet:
// Error-checking routine that performs manual lifetime management
// of a COM IErrorInfo object
HRESULT CheckComError_Manual()
{
HRESULT hr;
CComBSTR bstrDescription;
CComBSTR bstrSource;
CComBSTR bstrHelpFile;
IErrorInfo* pErrInfo = NULL; // naked COM interface pointer
hr = ::GetErrorInfo(0, &pErrInfo);
if(hr != S_OK)
return hr;
hr = pErrInfo->GetDescription(&bstrDescription);
if(FAILED(hr))
{
pErrInfo->Release(); // must release interface pointer before returning
return hr;
}
hr = pErrInfo->GetSource(&bstrSource);
if(FAILED(hr))
{
pErrInfo->Release(); // must release interface pointer before returning
return hr;
}
hr = pErrInfo->GetHelpFile(&bstrHelpFile);
if(FAILED(hr))
{
pErrInfo->Release(); // must release interface pointer before returning
return hr;
}
pErrInfo->Release(); // must release interface pointer before returning
return S_OK;
}
// Error-checking routine that performs automatic lifetime management
// of a COM IErrorInfo object through a CComPtr smart pointer object
HRESULT CheckComError_SmartPtr()
{
HRESULT hr;
CComBSTR bstrDescription;
CComBSTR bstrSource;
CComBSTR bstrHelpFile;
CComPtr<IErrorInfo> pErrInfo;
hr = ::GetErrorInfo(0, &pErrInfo);
if(hr != S_OK)
return hr;
hr = pErrInfo->GetDescription(&bstrDescription);
if(FAILED(hr))
return hr;
hr = pErrInfo->GetSource(&bstrSource);
if(FAILED(hr))
return hr;
hr = pErrInfo->GetHelpFile(&bstrHelpFile);
if(FAILED(hr))
return hr;
return S_OK;
} // CComPtr will auto-release underlying IErrorInfo interface pointer as needed
Verknüpfen Sie in Debugbuilds atlsd.lib für die Codeablaufverfolgung.
Vererbungshierarchie
CComPtr
Anforderungen
Header: atlbase.h
CComPtr::CComPtr
Der Konstruktor.
CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();
Parameter
lp
Wird zum Initialisieren des Schnittstellenzeigers verwendet.
T
Eine COM-Schnittstelle.
Hinweise
Die Konstruktoren, die einen Argumentaufruf ausführen AddRef lp, wenn es sich nicht um einen Nullzeiger handelt. Ein Nicht-NULL-Objekt ruft einen Release Aufruf der Vernichtung des CComPtr-Objekts ab, oder wenn dem CComPtr-Objekt ein neues Objekt zugewiesen ist.
CComPtr::operator =
Zuweisungsoperator.
T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();
Rückgabewert
Gibt einen Zeiger auf das aktualisierte CComPtr Objekt zurück.
Hinweise
Dieser Vorgang fügt das neue Objekt hinzu und gibt das vorhandene Objekt frei, sofern vorhanden.