Klasa WeakRef
Reprezentuje słabe odwołanie, które może być używane tylko przez środowisko wykonawcze systemu Windows, a nie klasyczny COM. Słabe odwołanie reprezentuje obiekt, który może lub nie jest dostępny.
Składnia
class WeakRef : public ComPtr<IWeakReference>;
Członkowie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
WeakRef::WeakRef Konstruktor |
Inicjuje nowe wystąpienie klasy WeakRef . |
WeakRef::~WeakRef Destruktora |
Deinitializuje bieżące wystąpienie WeakRef klasy. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
WeakRef::As |
Ustawia określony ComPtr parametr wskaźnika do reprezentowania określonego interfejsu. |
WeakRef::AsIID |
Ustawia określony ComPtr parametr wskaźnika, aby reprezentować określony identyfikator interfejsu. |
WeakRef::CopyTo |
Przypisuje wskaźnik do interfejsu, jeśli jest dostępny, do określonej zmiennej wskaźnika. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
WeakRef::operator& |
ComPtrRef Zwraca obiekt reprezentujący bieżący WeakRef obiekt. |
Uwagi
Obiekt WeakRef
utrzymuje silne odwołanie, które jest skojarzone z obiektem i może być prawidłowe lub nieprawidłowe. Wywołaj metodę As()
or AsIID()
, aby uzyskać silne odwołanie. Jeśli silne odwołanie jest prawidłowe, może uzyskać dostęp do skojarzonego obiektu. Jeśli silne odwołanie jest nieprawidłowe (nullptr
), skojarzony obiekt jest niedostępny.
WeakRef
Obiekt jest zwykle używany do reprezentowania obiektu, którego istnienie jest kontrolowane przez wątek zewnętrzny lub aplikację. Na przykład skonstruuj WeakRef
obiekt z odwołania do obiektu pliku. Gdy plik jest otwarty, silne odwołanie jest prawidłowe. Jeśli jednak plik zostanie zamknięty, silne odwołanie stanie się nieprawidłowe.
W zestawie SDK systemu Windows występuje zmiana zachowania w As
metodach , AsIID
i CopyTo
. Wcześniej, po wywołaniu dowolnej z tych metod, można sprawdzić WeakRef
nullptr
, czy silne odwołanie zostało pomyślnie uzyskane, jak w poniższym kodzie:
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!");
}
Powyższy kod nie działa w przypadku korzystania z zestawu Windows 10 SDK (lub nowszego). Zamiast tego sprawdź wskaźnik, który został przekazany dla elementu nullptr
.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Hierarchia dziedziczenia
Wymagania
Nagłówka:client.h
Obszaru nazw:Microsoft::WRL
WeakRef::WeakRef
Konstruktor
Inicjuje nowe wystąpienie klasy WeakRef
.
WeakRef();
WeakRef(
decltype(__nullptr)
);
WeakRef(
_In_opt_ IWeakReference* ptr
);
WeakRef(
const ComPtr<IWeakReference>& ptr
);
WeakRef(
const WeakRef& ptr
);
WeakRef(
_Inout_ WeakRef&& ptr
);
Parametry
ptr
Wskaźnik, odwołanie lub odwołanie rvalue do istniejącego obiektu, który inicjuje bieżący WeakRef
obiekt.
Uwagi
Pierwszy konstruktor inicjuje pusty WeakRef
obiekt. Drugi konstruktor inicjuje WeakRef
obiekt ze wskaźnika do interfejsu IWeakReference
. Trzeci konstruktor inicjuje WeakRef
obiekt z odwołania do ComPtr<IWeakReference>
obiektu. Czwarte i piąte konstruktory inicjują WeakRef
obiekt z innego WeakRef
obiektu.
WeakRef::~WeakRef
Destruktora
Deinitializuje bieżące wystąpienie WeakRef
klasy.
~WeakRef();
WeakRef::As
Ustawia określony ComPtr
parametr wskaźnika do reprezentowania określonego interfejsu.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* ptr
);
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> ptr
);
Parametry
U
Identyfikator interfejsu.
ptr
Po zakończeniu tej operacji obiekt reprezentujący parametr U.
Wartość zwracana
S_OK
jeśli ta operacja powiedzie się; w przeciwnym razie hrESULT wskazujący przyczynę niepowodzenia operacji iptr
jest ustawiona nanullptr
wartość .S_OK
jeśli ta operacja zakończy się pomyślnie, ale bieżącyWeakRef
obiekt został już zwolniony. Parametrptr
jest ustawiony nanullptr
wartość .S_OK
jeśli ta operacja powiedzie się, ale bieżącyWeakRef
obiekt nie pochodzi z parametruU
. Parametrptr
jest ustawiony nanullptr
wartość .
Uwagi
Błąd jest emitowany, jeśli parametr U
to IWeakReference
, lub nie pochodzi z IInspectable
.
Pierwszy szablon to formularz, którego należy użyć w kodzie. Drugi szablon to wewnętrzna specjalizacja pomocnika; obsługuje funkcje języka C++, takie jak słowo kluczowe odliczenia auto
typu.
Począwszy od zestawu WINDOWS 10 SDK, ta metoda nie ustawia WeakRef
wystąpienia na nullptr
wartość , jeśli nie można uzyskać słabego odwołania, dlatego należy unikać sprawdzania błędów kodu, który sprawdza WeakRef
wartość .nullptr
Zamiast tego sprawdź ptr dla nullptr
.
WeakRef::AsIID
Ustawia określony ComPtr
parametr wskaźnika, aby reprezentować określony identyfikator interfejsu.
HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IInspectable>* ptr
);
Parametry
riid
Identyfikator interfejsu.
ptr
Po zakończeniu tej operacji obiekt reprezentujący parametr riid
.
Wartość zwracana
S_OK
jeśli ta operacja powiedzie się; w przeciwnym razie hrESULT wskazujący przyczynę niepowodzenia operacji iptr
jest ustawiona nanullptr
wartość .S_OK
jeśli ta operacja zakończy się pomyślnie, ale bieżącyWeakRef
obiekt został już zwolniony. Parametrptr
jest ustawiony nanullptr
wartość .S_OK
jeśli ta operacja powiedzie się, ale bieżącyWeakRef
obiekt nie pochodzi z parametruriid
. Parametrptr
jest ustawiony nanullptr
wartość . (Aby uzyskać więcej informacji, zobacz Uwagi).
Uwagi
Błąd jest emitowany, jeśli parametr riid
nie pochodzi z IInspectable
elementu . Ten błąd zastępuje wartość zwracaną.
Pierwszy szablon to formularz, którego należy użyć w kodzie. Drugi szablon (nie pokazany tutaj, ale zadeklarowany w pliku nagłówka) jest wewnętrzną specjalizacją pomocnika, która obsługuje funkcje języka C++, takie jak auto
słowo kluczowe odliczenia typu.
Począwszy od zestawu WINDOWS 10 SDK, ta metoda nie ustawia WeakRef
wystąpienia na nullptr
wartość , jeśli nie można uzyskać słabego odwołania, dlatego należy unikać sprawdzania błędów kodu, który sprawdza WeakRef
wartość .nullptr
Zamiast tego sprawdź ptr
nullptr
wartość .
WeakRef::CopyTo
Przypisuje wskaźnik do interfejsu, jeśli jest dostępny, do określonej zmiennej wskaźnika.
HRESULT CopyTo(
REFIID riid,
_Deref_out_ IInspectable** ptr
);
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
);
HRESULT CopyTo(
_Deref_out_ IWeakReference** ptr
);
Parametry
U
Wskaźnik interfejsu IInspectable
. Błąd jest emitowany, jeśli U
nie pochodzi z IInspectable
elementu .
riid
Identyfikator interfejsu. Błąd jest emitowany, jeśli riid
nie pochodzi z IWeakReference
elementu .
ptr
Podwójnie pośredni wskaźnik do IInspectable
lub IWeakReference
.
Wartość zwracana
S_OK
w przypadku powodzenia; w przeciwnym razie HRESULT opisujący błąd. Aby uzyskać więcej informacji, zobacz Uwagi.
Uwagi
Wartość zwracana S_OK
oznacza, że operacja powiodła się, ale nie wskazuje, czy słabe odwołanie zostało rozpoznane jako silne odwołanie. Jeśli S_OK
zostanie zwrócony, przetestuj, że parametr ptr
jest silnym odwołaniem; oznacza to, że parametr ptr
nie jest równy nullptr
.
Począwszy od zestawu SDK systemu Windows 10, ta metoda nie ustawia WeakRef
wystąpienia na nullptr
wartość , jeśli nie można uzyskać słabego odwołania, dlatego należy unikać sprawdzania kodu błędu sprawdzającegoWeakRef
, który sprawdza wartość .nullptr
Zamiast tego sprawdź ptr
nullptr
wartość .
WeakRef::operator&
ComPtrRef
Zwraca obiekt reprezentujący bieżący WeakRef
obiekt.
Details::ComPtrRef<WeakRef> operator&() throw()
Wartość zwracana
ComPtrRef
Obiekt reprezentujący bieżący WeakRef
obiekt.
Uwagi
WeakRef::operator&
to wewnętrzny operator pomocnika, który nie ma być używany w kodzie.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla