Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uyarı
Winrt::box_value ve winrt::unbox_value işlevlerini kullanarak yalnızca skaler değerleri değil, aynı zamanda çoğu dizi türünü de (numaralandırma dizileri dışında) kutulayabilir ve kaldırabilirsiniz. winrt::unbox_value_or işlevini kullanarak yalnızca skaler değerleri çözebilirsiniz.
IInspectable arabirimi, Windows Çalışma Zamanı (WinRT) ortamında her bir çalışma zamanı sınıfının kök arabirimidir. Bu, her COM arabirimi ve sınıfının kökünde IUnknown'un yer almasına benzer bir fikirdir; ve System.Object her Ortak Tür Sistemi sınıfının kökünde yer alır.
Başka bir deyişle, IInspectable bekleyen bir işlev herhangi bir çalışma zamanı sınıfının örneğine geçirilebilir. Ancak, böyle bir işleve doğrudan skaler değer (sayısal veya metin değeri gibi) veya dizi geçiremezsiniz. Bunun yerine, bir skaler veya dizi değerinin bir başvuru sınıfı nesnesi içinde sarmalanması gerekir. Bu sarmalama işlemi, değer'e
Önemli
Windows Çalışma Zamanı API'sine geçirebileceğiniz herhangi bir türü kutulayabilir ve kutudan çıkarabilirsiniz. Başka bir deyişle, bir Windows Çalışma Zamanı türü. Sayısal değerler ve metin değerleri (dizeler) ve diziler, yukarıda verilen örneklerden bazılarıdır. Bir diğer örnek de IDL'de tanımladığınız bir struct örnektir. Standart bir C++ struct (IDL'de tanımlanmayan) kutulamaya çalışırsanız, derleyici size yalnızca bir Windows Çalışma Zamanı türünü kutulayabileceğinizi hatırlatır. Çalışma zamanı sınıfı bir Windows Çalışma Zamanı türüdür, ancak çalışma zamanı sınıflarını kutulamadan Windows Çalışma Zamanı API'lerine geçirebilirsiniz.
C++/WinRT, skaler veya dizi değeri alan ve IInspectableiçinde kutulanan değeri döndüren winrt::box_value işlevini sağlar. Bir
Değerin kutulanması örnekleri
LaunchActivatedEventArgs::Arguments erişimci işlevi, skaler bir değer olan winrt::hstring değerini döndürür. Hstring değerini
void App::OnLaunched(LaunchActivatedEventArgs const& e)
{
...
rootFrame.Navigate(winrt::xaml_typename<BlankApp1::MainPage>(), winrt::box_value(e.Arguments()));
...
}
bir XAML
Button().Content(winrt::box_value(L"Clicked"));
hstring dönüştürücü, string sabitini hstringolarak dönüştürür. Ardından, bir hstring alan winrt::box_value aşırı yüklemesi çağrılır.
IInspectable'ın kutu açma örnekleri
IInspectablebekleyen kendi işlevlerinizde, winrt::unbox_value kullanarak kutudan çıkarabilir ve varsayılan değerle kutudan çıkarmak için winrt::unbox_value_or kullanabilirsiniz. try_as kullanarak, std::optionalkutusunu açabilirsiniz.
void Unbox(winrt::Windows::Foundation::IInspectable const& object)
{
hstring hstringValue = unbox_value<hstring>(object); // Throws if object is not a boxed string.
hstringValue = unbox_value_or<hstring>(object, L"Default"); // Returns L"Default" if object is not a boxed string.
float floatValue = unbox_value_or<float>(object, 0.f); // Returns 0.0 if object is not a boxed float.
std::optional<int> optionalInt = object.try_as<int>(); // Returns std::nullopt if object is not a boxed int.
}
Kutulanmış değerin türünü belirleme
Eğer kutulanmış bir değer alırsanız ve içeriğinde ne tür bir veri olduğunu bilmiyorsanız (kutuyu açmak için türünü bilmeniz gerekir), o zaman kutulanmış değeri IPropertyValue arabirimi için sorgulayabilir ve ardından Tür çağrısını yapabilirsiniz. İşte bir kod örneği.
WINRT_ASSERT bir makro tanımıdır ve _ASSERTEolarak genişletilir.
float pi = 3.14f;
auto piInspectable = winrt::box_value(pi);
auto piPropertyValue = piInspectable.as<winrt::Windows::Foundation::IPropertyValue>();
WINRT_ASSERT(piPropertyValue.Type() == winrt::Windows::Foundation::PropertyType::Single);