Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
COM arabirim işaretçilerini yönetmek için bir akıllı işaretçi sınıfı.
Sözdizimi
template<class T>
class CComPtr
Parametreler
T
Depolanacak işaretçi türünü belirten bir COM arabirimi.
Üyeler
Ortak Oluşturucular
| Veri Akışı Adı | Açıklama |
|---|---|
CComPtr::CComPtr |
Oluşturucu. |
Ortak İşleçler
| Veri Akışı Adı | Açıklama |
|---|---|
CComPtr::operator = |
Üye işaretçisine bir işaretçi atar. |
Açıklamalar
ATL, COM arabirim işaretçilerini yönetmek için ve CComQIPtr kullanırCComPtr. Her ikisi de 'den CComPtrBasetüretilir ve her ikisi de otomatik başvuru sayma işlemi yapar.
CComPtr ve CComQIPtr sınıfları, otomatik başvuru sayımı yaparak bellek sızıntılarını ortadan kaldırmaya yardımcı olabilir. Aşağıdaki işlevlerin her ikisi de aynı mantıksal işlemleri yapar. Ancak, sınıfını kullandığından ikinci sürüm daha az hataya CComPtr açık olabilir:
// 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
Derlemelerde hata ayıklama bölümünde kod izleme için atlsd.lib bağlantısını kullanın.
Devralma Hiyerarşisi
CComPtr
Gereksinimler
Üstbilgi: atlbase.h
CComPtr::CComPtr
Oluşturucu.
CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();
Parametreler
lp
Arabirim işaretçisini başlatmak için kullanılır.
T
COM arabirimi.
Açıklamalar
Üzerinde bir bağımsız değişken çağrısı AddRef lpalan oluşturucular, bir null işaretçisi değilse. Null olmayan bir sahip olunan nesne, CComPtr nesnesinin yok edilmesi üzerine veya CComPtr nesnesine yeni bir nesne atandığında bir çağrı alır Release .
CComPtr::operator =
Atama işleci.
T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();
Dönüş Değeri
Güncelleştirilmiş CComPtr nesneye bir işaretçi döndürür
Açıklamalar
Bu işlem AddRefs yeni nesne ve varsa mevcut nesneyi serbest bırakır.