Bagikan melalui


WeakRef kelas

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 Constructor 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

ComPtr
 └ WeakRef

Persyaratan

Header:client.h

Ruang nama: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_OK jika operasi ini berhasil; jika tidak, HRESULT yang menunjukkan alasan operasi gagal, dan ptr diatur ke nullptr.

  • S_OK jika operasi ini berhasil, tetapi objek saat ini WeakRef telah dirilis. Parameter ptr diatur ke nullptr.

  • S_OK jika operasi ini berhasil, tetapi objek saat ini WeakRef tidak berasal dari parameter U. Parameter ptr diatur ke nullptr.

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 WeakRef ke nullptr 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_OK jika operasi ini berhasil; jika tidak, HRESULT yang menunjukkan alasan operasi gagal, dan ptr diatur ke nullptr.

  • S_OK jika operasi ini berhasil, tetapi objek saat ini WeakRef telah dirilis. Parameter ptr diatur ke nullptr.

  • S_OK jika operasi ini berhasil, tetapi objek saat ini WeakRef tidak berasal dari parameter riid. Parameter ptr diatur ke nullptr. (Untuk informasi selengkapnya, lihat Komentar.)

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 WeakRef ke nullptr 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.