Postupy: Aktivace a používání komponent prostředí Windows Runtime s použitím knihovny WRL
Tento dokument ukazuje, jak použít Knihovna šablon C++ prostředí Windows Runtime (WRL) k inicializaci prostředí Windows Runtime a jak aktivovat a používat prostředí Windows Runtime komponenty.
[!POZNÁMKA]
V tomto příkladu aktivuje integrovaný prostředí Windows Runtime komponenty.Chcete-li zjistit, jak vytvořit vlastní součást, která podobným způsobem můžete aktivovat, viz Postup: Vytvoření základní komponenty prostředí Windows Runtime s použitím knihovny WRL.
Chcete-li použít komponentu, musíte získat ukazatele rozhraní typu, které je implementováno pomocí komponenty.A protože základní technologie prostředí Windows Runtime je modelu COM (Component Object), je třeba dodržovat pravidla COM zachovat instance typu.Například musí udržovat počet odkazů určující, kdy je typ odstraněny z paměti.
Pro zjednodušení používání prostředí Windows Runtime, WRL poskytuje šablonu inteligentní ukazatel ComPtr<T>, který automaticky provede počítání odkazů.When you declare a variable, specify ComPtr<interface-name> identifier.Přístup člena rozhraní, použití operátoru šipka přístup členů (->) na identifikátor.
![]() |
---|
Při volání funkce jazyka rozhraní vždy otestujte HRESULT vrátí hodnotu. |
Aktivace a použití Runtime součásti systému Windows
Následující kroky použít Windows::Foundation::IUriRuntimeClass rozhraní a ukazuje, jak vytvořit aktivace výrobce prostředí Windows Runtime komponenty, vytvoření instance komponenty a načíst hodnotu vlastnosti.Jsou také ukazuje, jak inicializovat prostředí Windows Runtime.Kompletní příklad postupuje.
![]() |
---|
Ačkoli obvykle používají WRL v Windows Store app, tento příklad používá aplikace konzoly pro ilustraci.Funguje jako wprintf_s nejsou k dispozici Windows Store app.Další informace o typech a funkce, které lze použít v Windows Store app, viz není podporován s /ZW funkcí CRT a aplikacím Win32 a COM pro Windows Store. |
Aktivovat a používat komponentu Windows Runtime
Zahrnout (#include) všechny požadované prostředí Windows Runtime, WRL, nebo záhlaví knihovny standard C++.
#include <Windows.Foundation.h> #include <wrl\wrappers\corewrappers.h> #include <wrl\client.h> #include <stdio.h> using namespace ABI::Windows::Foundation; using namespace Microsoft::WRL; using namespace Microsoft::WRL::Wrappers;
Doporučujeme vám využít using namespace v souboru CPP pro čitelnost kódu.
Inicializace podprocesu, ve kterém se aplikace spustí.Každá aplikace musí inicializovat jeho vlákno a model podprocesů.V tomto příkladu Microsoft::WRL::Wrappers::RoInitializeWrapper třídy inicializace prostředí Windows Runtime a určuje, RO_INIT_MULTITHREADED jako model podprocesů.RoInitializeWrapper Třídy volání Windows::Foundation::Initialize na stavbu, a Windows::Foundation::Uninitialize po jeho zničení.
// Initialize the Windows Runtime. RoInitializeWrapper initialize(RO_INIT_MULTITHREADED); if (FAILED(initialize)) { return PrintError(__LINE__, initialize); }
Druhý příkaz RoInitializeWrapper::HRESULT vrátí operátor HRESULT z volání Windows::Foundation::Initialize.
Vytvoření Aktivace výroby pro ABI::Windows::Foundation::IUriRuntimeClassFactory rozhraní.
// Get the activation factory for the IUriRuntimeClass interface. ComPtr<IUriRuntimeClassFactory> uriFactory; HRESULT hr = GetActivationFactory(HStringReference(RuntimeClass_Windows_Foundation_Uri).Get(), &uriFactory); if (FAILED(hr)) { return PrintError(__LINE__, hr); }
prostředí Windows Runtime Používá k identifikaci typů plně kvalifikované názvy.RuntimeClass_Windows_Foundation_Uri Parametr je řetězec, který je poskytován prostředí Windows Runtime a obsahuje název požadovaná třída.
Inicializovat Microsoft::WRL::Wrappers::HString proměnná, která představuje identifikátor URI "https://www.microsoft.com".
// Create a string that represents a URI. HString uriHString; hr = uriHString.Set(L"https://www.microsoft.com"); if (FAILED(hr)) { return PrintError(__LINE__, hr); }
V prostředí Windows Runtime, je nelze přidělit paměť pro řetězec, prostředí Windows Runtime bude používat.Místo toho prostředí Windows Runtime vytvoří kopii vašeho řetězce do vyrovnávací paměti, že udržuje a používá pro operace a potom vrací popisovač do vyrovnávací paměti je vytvořen.
Použití IUriRuntimeClassFactory::CreateUri tovární metody vytvořit ABI::Windows::Foundation::IUriRuntimeClass objektu.
// Create the IUriRuntimeClass object. ComPtr<IUriRuntimeClass> uri; hr = uriFactory->CreateUri(uriHString.Get(), &uri); if (FAILED(hr)) { return PrintError(__LINE__, hr); }
Volat IUriRuntimeClass::get_Domain metoda načíst hodnotu Domain vlastnost.
// Get the domain part of the URI. HString domainName; hr = uri->get_Domain(domainName.GetAddressOf()); if (FAILED(hr)) { return PrintError(__LINE__, hr); }
Tisknout název domény v konzole a vrátit.Všechny ComPtr a RAII objekty ponechat oboru automaticky uvolněna.
// Print the domain name and return. wprintf_s(L"Domain name: %s\n", domainName.GetRawBuffer(nullptr)); // All smart pointers and RAII objects go out of scope here.
WindowsGetStringRawBuffer funkce načte podkladové formě Unicode řetězec identifikátoru URI.
Zde je kompletní příklad:
// wrl-consume-component.cpp
// compile with: runtimeobject.lib
#include <Windows.Foundation.h>
#include <wrl\wrappers\corewrappers.h>
#include <wrl\client.h>
#include <stdio.h>
using namespace ABI::Windows::Foundation;
using namespace Microsoft::WRL;
using namespace Microsoft::WRL::Wrappers;
// Prints an error string for the provided source code line and HRESULT
// value and returns the HRESULT value as an int.
int PrintError(unsigned int line, HRESULT hr)
{
wprintf_s(L"ERROR: Line:%d HRESULT: 0x%X\n", line, hr);
return hr;
}
int wmain()
{
// Initialize the Windows Runtime.
RoInitializeWrapper initialize(RO_INIT_MULTITHREADED);
if (FAILED(initialize))
{
return PrintError(__LINE__, initialize);
}
// Get the activation factory for the IUriRuntimeClass interface.
ComPtr<IUriRuntimeClassFactory> uriFactory;
HRESULT hr = GetActivationFactory(HStringReference(RuntimeClass_Windows_Foundation_Uri).Get(), &uriFactory);
if (FAILED(hr))
{
return PrintError(__LINE__, hr);
}
// Create a string that represents a URI.
HString uriHString;
hr = uriHString.Set(L"https://www.microsoft.com");
if (FAILED(hr))
{
return PrintError(__LINE__, hr);
}
// Create the IUriRuntimeClass object.
ComPtr<IUriRuntimeClass> uri;
hr = uriFactory->CreateUri(uriHString.Get(), &uri);
if (FAILED(hr))
{
return PrintError(__LINE__, hr);
}
// Get the domain part of the URI.
HString domainName;
hr = uri->get_Domain(domainName.GetAddressOf());
if (FAILED(hr))
{
return PrintError(__LINE__, hr);
}
// Print the domain name and return.
wprintf_s(L"Domain name: %s\n", domainName.GetRawBuffer(nullptr));
// All smart pointers and RAII objects go out of scope here.
}
/*
Output:
Domain name: microsoft.com
*/
Probíhá kompilace kódu
Kompilovat kód, zkopírujte jej a vložte do projektu sady Visual Studio nebo vložit do souboru s názvem wrl spotřebovat component.cpp a potom spusťte následující příkaz v okně Příkazový řádek Visual Studio.
cl.exe wrl-consume-component.cpp runtimeobject.lib