Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mewakili referensi lemah yang hanya dapat digunakan oleh Windows Runtime, bukan COM klasik. Referensi lemah mewakili objek yang mungkin atau mungkin tidak dapat diakses.
Sintaks
class WeakRef : public ComPtr<IWeakReference>;
Anggota
Konstruktor Publik
| Nama | Deskripsi |
|---|---|
WeakRef::WeakRef pembangun |
Menginisialisasi instans baru kelas WeakRef. |
WeakRef::~WeakRef destruktor |
Mendeinisialisasi instans WeakRef kelas saat ini. |
Metode Publik
| Nama | Deskripsi |
|---|---|
WeakRef::As |
Mengatur parameter penunjuk yang ditentukan ComPtr untuk mewakili antarmuka yang ditentukan. |
WeakRef::AsIID |
Mengatur parameter penunjuk yang ditentukan ComPtr untuk mewakili ID antarmuka yang ditentukan. |
WeakRef::CopyTo |
Menetapkan penunjuk ke antarmuka, jika tersedia, ke variabel penunjuk yang ditentukan. |
Operator publik
| Nama | Deskripsi |
|---|---|
WeakRef::operator& |
Mengembalikan ComPtrRef objek yang mewakili objek saat ini WeakRef . |
Keterangan
Objek WeakRef mempertahankan referensi yang kuat, yang terkait dengan objek, dan dapat valid atau tidak valid.
As() Panggil metode atau AsIID() untuk mendapatkan referensi yang kuat. Ketika referensi yang kuat valid, referensi tersebut dapat mengakses objek terkait. Ketika referensi yang kuat tidak valid (nullptr), objek terkait tidak dapat diakses.
Objek WeakRef biasanya digunakan untuk mewakili objek yang keberadaannya dikontrol oleh utas atau aplikasi eksternal. Misalnya, buat WeakRef objek dari referensi ke objek file. Saat file terbuka, referensi yang kuat valid. Tetapi jika file ditutup, referensi yang kuat menjadi tidak valid.
Ada perubahan perilaku dalam Asmetode , AsIID, dan CopyTo di Windows SDK. Sebelumnya, setelah memanggil salah satu metode ini, Anda dapat memeriksa WeakRefnullptr untuk menentukan apakah referensi yang kuat berhasil diperoleh, seperti dalam kode berikut:
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!");
}
Kode di atas tidak berfungsi saat menggunakan Windows 10 SDK (atau yang lebih baru). Sebagai gantinya, periksa pointer yang diteruskan untuk nullptr.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Hierarki Warisan
Persyaratan
Header:client.h
kumpulan nama XML: Microsoft::WRL
Konstruktor WeakRef::WeakRef
Menginisialisasi instans baru kelas WeakRef.
WeakRef();
WeakRef(
decltype(__nullptr)
);
WeakRef(
_In_opt_ IWeakReference* ptr
);
WeakRef(
const ComPtr<IWeakReference>& ptr
);
WeakRef(
const WeakRef& ptr
);
WeakRef(
_Inout_ WeakRef&& ptr
);
Parameter
ptr
Penunjuk, referensi, atau referensi rvalue ke objek yang ada yang menginisialisasi objek saat ini WeakRef .
Keterangan
Konstruktor pertama menginisialisasi objek kosong WeakRef . Konstruktor kedua menginisialisasi WeakRef objek dari penunjuk ke IWeakReference antarmuka. Konstruktor ketiga menginisialisasi WeakRef objek dari referensi ke ComPtr<IWeakReference> objek. Konstruktor keempat dan kelima menginisialisasi WeakRef objek dari objek lain WeakRef .
WeakRef::~WeakRef destruktor
Mendeinisialisasi instans WeakRef kelas saat ini.
~WeakRef();
WeakRef::As
Mengatur parameter penunjuk yang ditentukan ComPtr untuk mewakili antarmuka yang ditentukan.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* ptr
);
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> ptr
);
Parameter
U
ID antarmuka.
ptr
Ketika operasi ini selesai, objek yang mewakili parameter U.
Nilai hasil
S_OKjika operasi ini berhasil; jika tidak, HRESULT yang menunjukkan alasan operasi gagal, danptrdiatur kenullptr.S_OKjika operasi ini berhasil, tetapi objek saat iniWeakReftelah dirilis. Parameterptrdiatur kenullptr.S_OKjika operasi ini berhasil, tetapi objek saat iniWeakReftidak berasal dari parameterU. Parameterptrdiatur kenullptr.
Keterangan
Kesalahan dipancarkan jika parameter U adalah IWeakReference, atau tidak berasal dari IInspectable.
Templat pertama adalah formulir yang harus Anda gunakan dalam kode Anda. Templat kedua adalah spesialisasi internal pembantu; ini mendukung fitur bahasa C++ seperti kata kunci pengurangan auto jenis.
Mulai dari Windows 10 SDK, metode ini tidak mengatur WeakRef instans nullptr ke WeakRef jika referensi lemah tidak dapat diperoleh, jadi Anda harus menghindari kode pemeriksaan kesalahan yang memeriksa untuk nullptr. Sebagai gantinya, periksa ptr untuk nullptr.
WeakRef::AsIID
Mengatur parameter penunjuk yang ditentukan ComPtr untuk mewakili ID antarmuka yang ditentukan.
HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IInspectable>* ptr
);
Parameter
riid
ID antarmuka.
ptr
Ketika operasi ini selesai, objek yang mewakili parameter riid.
Nilai hasil
S_OKjika operasi ini berhasil; jika tidak, HRESULT yang menunjukkan alasan operasi gagal, danptrdiatur kenullptr.S_OKjika operasi ini berhasil, tetapi objek saat iniWeakReftelah dirilis. Parameterptrdiatur kenullptr.S_OKjika operasi ini berhasil, tetapi objek saat iniWeakReftidak berasal dari parameterriid. Parameterptrdiatur kenullptr. Untuk informasi selengkapnya, lihat Keterangan.
Keterangan
Kesalahan dipancarkan jika parameter riid tidak berasal dari IInspectable. Kesalahan ini menggantikan nilai pengembalian.
Templat pertama adalah formulir yang harus Anda gunakan dalam kode Anda. Templat kedua (tidak ditampilkan di sini, tetapi dinyatakan dalam file header) adalah spesialisasi internal pembantu yang mendukung fitur bahasa C++ seperti auto kata kunci pengurangan jenis.
Mulai dari Windows 10 SDK, metode ini tidak mengatur WeakRef instans nullptr ke WeakRef jika referensi lemah tidak dapat diperoleh, jadi Anda harus menghindari kode pemeriksaan kesalahan yang memeriksa untuk nullptr. Sebagai gantinya, periksa ptrnullptr.
WeakRef::CopyTo
Menetapkan penunjuk ke antarmuka, jika tersedia, ke variabel penunjuk yang ditentukan.
HRESULT CopyTo(
REFIID riid,
_Deref_out_ IInspectable** ptr
);
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
);
HRESULT CopyTo(
_Deref_out_ IWeakReference** ptr
);
Parameter
U
Arahkan IInspectable antarmuka. Kesalahan dipancarkan jika U tidak berasal dari IInspectable.
riid
ID antarmuka. Kesalahan dipancarkan jika riid tidak berasal dari IWeakReference.
ptr
Penunjuk tidak langsung dua kali lipat ke IInspectable atau IWeakReference.
Nilai hasil
S_OK jika berhasil; jika tidak, HRESULT yang menjelaskan kegagalan. Untuk informasi selengkapnya, lihat Keterangan.
Keterangan
Nilai S_OK pengembalian berarti bahwa operasi ini berhasil, tetapi tidak menunjukkan apakah referensi lemah diselesaikan ke referensi yang kuat. Jika S_OK dikembalikan, uji parameter ptr tersebut adalah referensi yang kuat; artinya, parameter ptr tidak sama dengan nullptr.
Mulai dari Windows 10 SDK, metode ini tidak mengatur WeakRef instans ke nullptr jika referensi lemah tidak dapat diperoleh, jadi Anda harus menghindari kode pemeriksaan kesalahan yang memeriksa WeakRef untuk nullptr. Sebagai gantinya, periksa ptrnullptr.
WeakRef::operator&
Mengembalikan ComPtrRef objek yang mewakili objek saat ini WeakRef .
Details::ComPtrRef<WeakRef> operator&() throw()
Nilai hasil
Objek ComPtrRef yang mewakili objek saat ini WeakRef .
Keterangan
WeakRef::operator& adalah operator pembantu internal yang tidak dimaksudkan untuk digunakan dalam kode Anda.