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
, AsIID
ve 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 nullptr
geçirilen işaretçiyi denetleyin.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Devralma hiyerarşisi
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 veptr
olaraknullptr
ayarlanmış bir HRESULT.S_OK
bu işlem başarılı olursa, ancak geçerliWeakRef
nesne zaten serbest bırakılmışsa. Parametresiptr
olaraknullptr
ayarlanır.S_OK
bu işlem başarılı olursa, ancak geçerliWeakRef
nesne parametresindenU
türetilmiş değilse. Parametresiptr
olaraknullptr
ayarlanır.
Açıklamalar
parametresi U
IWeakReference
ise veya parametresinden IInspectable
tü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 nullptr
denetleyen WeakRef
kodun hata denetiminden kaçınmanız gerekir. Bunun yerine ptr için nullptr
iş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 riid
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 veptr
olaraknullptr
ayarlanmış bir HRESULT.S_OK
bu işlem başarılı olursa, ancak geçerliWeakRef
nesne zaten serbest bırakılmışsa. Parametresiptr
olaraknullptr
ayarlanır.S_OK
bu işlem başarılı olursa, ancak geçerliWeakRef
nesne parametresindenriid
türetilmiş değilse. Parametresiptr
olaraknullptr
ayarlanır. (Daha fazla bilgi için bkz. Açıklamalar.)
Açıklamalar
parametresinden riid
IInspectable
tü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 nullptr
denetleyen 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 IInspectable
türetilmemişse U
bir hata oluşur.
riid
Arabirim kimliği. kaynağından IWeakReference
türetilmemişse riid
bir hata oluşur.
ptr
veya IWeakReference
iç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 nullptr
eş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
nullptr
kod 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.