Porady: uaktywnianie składnika środowiska wykonawczego systemu Windows za pomocą biblioteki WRL i korzystanie z niego
Dokument ten pokazuje sposób używania Biblioteka szablonów C++ środowiska wykonawczego systemu Windows (WRL) do zainicjowania Środowisko wykonawcze systemu Windows i jak uaktywnić i używać Środowisko wykonawcze systemu Windows składnika.
[!UWAGA]
W tym przykładzie uaktywnia wbudowaną Środowisko wykonawcze systemu Windows składnika.Aby dowiedzieć się, jak utworzyć swój własny składnik, który można uaktywnić w podobny sposób, zobacz Wskazówki: tworzenie podstawowego składnika środowiska wykonawczego systemu Windows za pomocą biblioteki WRL.
Aby użyć składnika, należy uzyskać wskaźnika interfejsu na typ, który jest implementowany przez składnik.I dlatego podstawowa technologia Środowisko wykonawcze systemu Windows modelu COM (Component Object), to należy wykonać reguły COM do utrzymania wystąpienie tego typu.Na przykład, trzeba zachować licznika odwołań , który określa kiedy typ zostanie usunięty z pamięci.
Aby uprościć stosowania Środowisko wykonawcze systemu Windows, WRL stanowi szablon inteligentnego wskaźnika ComPtr<T>, która automatycznie wykonuje zliczaniem odwołań.When you declare a variable, specify ComPtr<interface-name> identifier.Aby uzyskać dostęp do członka interfejsu, zastosować operator strzałkowy dostęp do elementu członkowskiego (->) na identyfikator.
![]() |
---|
Podczas wywołania funkcji interfejsu, należy zawsze przetestować HRESULT , zwracają wartość. |
Aktywowanie i przy użyciu składnika czasu wykonywania systemu Windows
Następujące kroki stosowania Windows::Foundation::IUriRuntimeClass interfejs do demonstrowania sposobu tworzenia fabryki aktywacji dla Środowisko wykonawcze systemu Windows składnika, utworzenie wystąpienia tego składnika i pobierania wartości właściwości.Pokazują one również dotyczące inicjowania Środowisko wykonawcze systemu Windows.Pełny przykład poniżej.
![]() |
---|
Chociaż zazwyczaj używają WRL w Windows Store aplikacji, w tym przykładzie używa aplikacja konsoli dla celów ilustracyjnych.Funkcji, takich jak wprintf_s nie są dostępne z Windows Store aplikacji.Aby uzyskać więcej informacji na temat typów i funkcji, których można używać w Windows Store aplikacji, zobacz CRT funkcje nie obsługiwane przez /ZW i aplikacje Win32 i COM dla Sklepu Windows. |
Aby uaktywnić i używać składnika Windows Runtime
Obejmują (#include) wszystkie wymagane Środowisko wykonawcze systemu Windows, WRL, lub standard C++ library nagłówków.
#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;
Firma Microsoft zaleca, aby wykorzystać using namespace w pliku cpp, aby zwiększyć czytelność kodu w dyrektywie.
Zainicjować wątku, w którym wykonuje się aplikacja.Każdy aplikacja musi zainicjować jego gwintu i model wątka.W poniższym przykładzie użyto Microsoft::WRL::Wrappers::RoInitializeWrapper klasy zainicjować Środowisko wykonawcze systemu Windows i określa RO_INIT_MULTITHREADED jako model wątka.RoInitializeWrapper Klasy wywołania Windows::Foundation::Initialize w budownictwie, i Windows::Foundation::Uninitialize kiedy został zniszczony.
// Initialize the Windows Runtime. RoInitializeWrapper initialize(RO_INIT_MULTITHREADED); if (FAILED(initialize)) { return PrintError(__LINE__, initialize); }
W drugiej instrukcji RoInitializeWrapper::HRESULT operator zwraca HRESULT wywołanie Windows::Foundation::Initialize.
Tworzenie fabryka aktywacji dla ABI::Windows::Foundation::IUriRuntimeClassFactory interfejsu.
// 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); }
Środowisko wykonawcze systemu Windows Używa nazwy w pełni kwalifikowane do identyfikacji typów.RuntimeClass_Windows_Foundation_Uri Parametr jest ciągiem, który jest udostępniany przez Środowisko wykonawcze systemu Windows i zawiera nazwę klasy wymagane w czasie wykonywania.
Inicjowanie Microsoft::WRL::Wrappers::HString zmienną, która reprezentuje identyfikator 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); }
W Środowisko wykonawcze systemu Windows, można nie przydzielić pamięci ciąg, który Środowisko wykonawcze systemu Windows będzie używany.Zamiast tego Środowisko wykonawcze systemu Windows tworzy kopię ciągu do buforu, że to utrzymuje i używa dla operacji, a następnie zwraca uchwyt do buforu on utworzony.
Użycie IUriRuntimeClassFactory::CreateUri metoda fabrykująca do tworzenia ABI::Windows::Foundation::IUriRuntimeClass obiektu.
// Create the IUriRuntimeClass object. ComPtr<IUriRuntimeClass> uri; hr = uriFactory->CreateUri(uriHString.Get(), &uri); if (FAILED(hr)) { return PrintError(__LINE__, hr); }
Wywołanie IUriRuntimeClass::get_Domain metoda pobierania wartości Domain właściwości.
// Get the domain part of the URI. HString domainName; hr = uri->get_Domain(domainName.GetAddressOf()); if (FAILED(hr)) { return PrintError(__LINE__, hr); }
Czy drukować nazwę domeny do konsoli i powrócić.Wszystkie ComPtr i obiekty RAII pozostawić zakres i są automatycznie zwalniane.
// 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 funkcja pobiera podstawowego formularza Unicode ciąg identyfikatora URI.
Oto przykład kompletne:
// 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
*/
Kompilowanie kodu
Aby skompilować kod, skopiuj go a następnie wkleić go w projekcie programu Visual Studio lub wkleić go w pliku o nazwie wrl zużywają component.cpp , a następnie uruchomić następujące polecenie w oknie wiersza polecenia programu Visual Studio.
cl.exe wrl-consume-component.cpp runtimeobject.lib
Zobacz też
Koncepcje
Biblioteka szablonów języka C++ środowiska wykonawczego systemu Windows (WRL)