WeakRef sınıfı

Klasik COM değil, yalnızca Windows Çalışma Zamanı tarafından kullanılabilen zayıf bir başvuruyu temsil eder. Zayıf başvuru, erişilebilir veya erişilebilir olmayabilecek bir nesneyi temsil eder.

Sözdizimi

class WeakRef : public ComPtr<IWeakReference>;

Üyeler

Ortak oluşturucular

Veri Akışı Adı Açıklama
WeakRef::WeakRef Oluşturucu WeakRef sınıfının yeni bir örneğini başlatır.
WeakRef::~WeakRef Yıkıcı Sınıfın geçerli örneğini WeakRef başlatır.

Genel yöntemler

Veri Akışı Adı Açıklama
WeakRef::As Belirtilen işaretçi parametresini belirtilen ComPtr arabirimi temsil etmek için ayarlar.
WeakRef::AsIID Belirtilen ComPtr işaretçi parametresini belirtilen arabirim kimliğini temsil etmek için ayarlar.
WeakRef::CopyTo Varsa, belirtilen işaretçi değişkenine bir arabirim işaretçisi atar.

Genel işleçler

Veri Akışı Adı Açıklama
WeakRef::operator& Geçerli WeakRef nesneyi temsil eden bir ComPtrRef nesne döndürür.

Açıklamalar

Nesne WeakRef , bir nesneyle ilişkili güçlü bir başvuru tutar ve geçerli veya geçersiz olabilir. As() Güçlü bir başvuru elde etmek için veya AsIID() yöntemini çağırın. Güçlü başvuru geçerli olduğunda, ilişkili nesneye erişebilir. Güçlü başvuru geçersiz olduğunda ()nullptr ilişkili nesneye erişilemez.

Nesne WeakRef genellikle varlığı dış iş parçacığı veya uygulama tarafından denetlenen bir nesneyi temsil etmek için kullanılır. Örneğin, bir WeakRef dosya nesnesine yapılan başvurudan bir nesne oluşturun. Dosya açıkken, güçlü başvuru geçerlidir. Ancak dosya kapatılırsa, güçlü başvuru geçersiz olur.

Windows SDK'sında As, AsIIDve CopyTo yöntemlerinde bir davranış değişikliği vardır. Daha önce, bu yöntemlerden herhangi birini çağırdıktan sonra, aşağıdaki kodda WeakRef olduğu gibi güçlü bir başvurunun başarıyla alınıp alınmadığını belirlemek için nullptr öğesini denetleyebiliyordu:

WeakRef wr;
strongComptrRef.AsWeak(&wr);

// Now suppose that the object strongComPtrRef points to no longer exists
// and the following code tries to get a strong ref from the weak ref:
ComPtr<ISomeInterface> strongRef;
HRESULT hr = wr.As(&strongRef);

// This check won't work with the Windows 10 SDK version of the library.
// Check the input pointer instead.
if(wr == nullptr)
{
    wprintf(L"Couldn't get strong ref!");
}

Yukarıdaki kod, Windows 10 SDK(veya üzeri) kullanılırken çalışmaz. Bunun yerine, için nullptrgeçirilen işaretçiyi denetleyin.

if (strongRef == nullptr)
{
    wprintf(L"Couldn't get strong ref!");
}

Devralma hiyerarşisi

ComPtr
 └ WeakRef

Gereksinimler

Üstbilgi: client.h

Ad alanı: Microsoft::WRL

WeakRef::WeakRef Oluşturucu

WeakRef sınıfının yeni bir örneğini başlatır.

WeakRef();
WeakRef(
   decltype(__nullptr)
);

WeakRef(
   _In_opt_ IWeakReference* ptr
);

WeakRef(
   const ComPtr<IWeakReference>& ptr
);

WeakRef(
   const WeakRef& ptr
);

WeakRef(
   _Inout_ WeakRef&& ptr
);

Parametreler

ptr
Geçerli WeakRef nesneyi başlatan mevcut bir nesneye yönelik işaretçi, başvuru veya rvalue-başvurusu.

Açıklamalar

İlk oluşturucu boş WeakRef bir nesne başlatır. İkinci oluşturucu, arabirime yönelik bir işaretçiden IWeakReference bir WeakRef nesne başlatır. Üçüncü oluşturucu, nesne WeakRef başvurusundan bir ComPtr<IWeakReference> nesne başlatır. Dördüncü ve beşinci oluşturucular başka WeakRef bir nesneden bir WeakRef nesne başlatır.

WeakRef::~WeakRef Yıkıcı

Sınıfın geçerli örneğini WeakRef başlatır.

~WeakRef();

WeakRef::As

Belirtilen işaretçi parametresini belirtilen ComPtr arabirimi temsil etmek için ayarlar.

template<typename U>
HRESULT As(
   _Out_ ComPtr<U>* ptr
);

template<typename U>
HRESULT As(
   _Out_ Details::ComPtrRef<ComPtr<U>> ptr
);

Parametreler

U
Arabirim kimliği.

ptr
Bu işlem tamamlandığında, U parametresini temsil eden bir nesne.

Dönüş değeri

  • S_OK bu işlem başarılı olursa; aksi takdirde, işlemin başarısız olmasının nedenini belirten ve ptr olarak nullptrayarlanmış bir HRESULT.

  • S_OK bu işlem başarılı olursa, ancak geçerli WeakRef nesne zaten serbest bırakılmışsa. Parametresi ptr olarak nullptrayarlanır.

  • S_OK bu işlem başarılı olursa, ancak geçerli WeakRef nesne parametresinden Utüretilmiş değilse. Parametresi ptr olarak nullptrayarlanır.

Açıklamalar

parametresi U IWeakReferenceise veya parametresinden IInspectabletüretilmemişse bir hata oluşur.

İlk şablon, kodunuzda kullanmanız gereken formdur. İkinci şablon bir iç, yardımcı özelleştirmedir; tür kesinti anahtar sözcüğü gibi auto C++ dil özelliklerini destekler.

Windows 10 SDK'sından başlayarak, bu yöntem zayıf başvuru alınamadıysa örneği nullptr olarak ayarlamazWeakRef, bu nedenle için nullptrdenetleyen WeakRef kodun hata denetiminden kaçınmanız gerekir. Bunun yerine ptr için nullptrişaretleyin.

WeakRef::AsIID

Belirtilen ComPtr işaretçi parametresini belirtilen arabirim kimliğini temsil etmek için ayarlar.

HRESULT AsIID(
   REFIID riid,
   _Out_ ComPtr<IInspectable>* ptr
);

Parametreler

riid
Arabirim kimliği.

ptr
Bu işlem tamamlandığında parametresini riidtemsil eden bir nesne.

Dönüş değeri

  • S_OK bu işlem başarılı olursa; aksi takdirde, işlemin başarısız olmasının nedenini belirten ve ptr olarak nullptrayarlanmış bir HRESULT.

  • S_OK bu işlem başarılı olursa, ancak geçerli WeakRef nesne zaten serbest bırakılmışsa. Parametresi ptr olarak nullptrayarlanır.

  • S_OK bu işlem başarılı olursa, ancak geçerli WeakRef nesne parametresinden riidtüretilmiş değilse. Parametresi ptr olarak nullptrayarlanır. (Daha fazla bilgi için bkz. Açıklamalar.)

Açıklamalar

parametresinden riid IInspectabletüretilmemişse bir hata oluşur. Bu hata, dönüş değerinin yerini alır.

İlk şablon, kodunuzda kullanmanız gereken formdur. İkinci şablon (burada gösterilmez, ancak üst bilgi dosyasında bildirilir), tür kesinti anahtar sözcüğü gibi auto C++ dil özelliklerini destekleyen bir iç yardımcı özelleştirmedir.

Windows 10 SDK'sından başlayarak, bu yöntem zayıf başvuru alınamadıysa örneği nullptr olarak ayarlamazWeakRef, bu nedenle için nullptrdenetleyen WeakRef kodun hata denetiminden kaçınmanız gerekir. Bunun yerine öğesini denetleyin ptr nullptr.

WeakRef::CopyTo

Varsa, belirtilen işaretçi değişkenine bir arabirim işaretçisi atar.

HRESULT CopyTo(
   REFIID riid,
   _Deref_out_ IInspectable** ptr
);

template<typename U>
HRESULT CopyTo(
   _Deref_out_ U** ptr
);

HRESULT CopyTo(
   _Deref_out_ IWeakReference** ptr
);

Parametreler

U
Arabirim işaretçisi IInspectable . kaynağından IInspectabletüretilmemişse U bir hata oluşur.

riid
Arabirim kimliği. kaynağından IWeakReferencetüretilmemişse riid bir hata oluşur.

ptr
veya IWeakReferenceiçin IInspectable iki kat dolaylı işaretçi.

Dönüş değeri

S_OK başarılı olursa; aksi takdirde, hatayı açıklayan bir HRESULT. Daha fazla bilgi için bkz . Açıklamalar.

Açıklamalar

dönüş değeri S_OK , bu işlemin başarılı olduğu anlamına gelir, ancak zayıf başvurunun güçlü bir başvuruya çözümlenip çözümlenmediğini göstermez. Döndürülürse S_OK , bu parametrenin ptr güçlü bir başvuru olup olmadığını test edin; diğer bir ifadeyle parametre ptr ile nullptreşit değildir.

Windows 10 SDK'sından başlayarak, bu yöntem zayıf başvuru alınamazsa örneği olarak nullptr ayarlamazWeakRef, bu nedenle için denetleyen WeakRef nullptrkod denetiminden kaçınmanız gerekir. Bunun yerine öğesini denetleyin ptr nullptr.

WeakRef::operator&

Geçerli WeakRef nesneyi temsil eden bir ComPtrRef nesne döndürür.

Details::ComPtrRef<WeakRef> operator&() throw()

Dönüş değeri

ComPtrRef Geçerli WeakRef nesneyi temsil eden bir nesne.

Açıklamalar

WeakRef::operator& kodunuzda kullanılması amaçlanmamış bir iç yardımcı işleçtir.