Porady: uaktywnianie składnika środowiska wykonawczego systemu Windows za pomocą biblioteki WRL i korzystanie z niego
Ten dokument pokazuje sposób używania Biblioteka szablonów C++ środowiska wykonawczego systemu Windows (WRL) aby zainicjować Środowisko wykonawcze systemu Windows i uaktywnić i używać Środowisko wykonawcze systemu Windows składnika.
Użycie składnika, konieczne jest uzyskanie wskaźnika interfejsu z typem, który jest implementowany przez składnik.A ponieważ podstawowa technologia Środowisko wykonawcze systemu Windows jest Component Object Model (COM), musi przestrzegać reguł 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ć stosowanie Środowisko wykonawcze systemu Windows, WRL zawiera szablon inteligentnego wskaźnika ComPtr <T>, która automatycznie wykonuje zliczanie odwołań.Przy deklarowaniu zmiennej, należy określić ComPtr<Nazwa interfejsu>identyfikator.Aby uzyskać dostęp do członka interfejsu, operator dostęp członek strzałkę zastosować (->) na identyfikator.
![]() |
---|
Gdy wywoływana jest funkcja interfejsu, należy zawsze przetestować HRESULT , zwracają wartość. |
Uaktywnianie 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, a następnie pobrać wartości właściwości.Przedstawiają także dotyczące inicjowania Środowisko wykonawcze systemu Windows.Poniżej przedstawiono prosty przykład kompletne.
![]() |
---|
Chociaż zazwyczaj używa się WRL w Windows Store aplikacji, w tym przykładzie używa aplikacji konsoli jako ilustracja.Funkcji, takich jak wprintf_s nie są dostępne z Windows Store aplikacji.Aby uzyskać więcej inforomation 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 aplikacji Win32 i COM dla magazynu systemu Windows. |
Obejmują (#include) wszystkie wymagane Środowisko wykonawcze systemu Windows, WRL, lub standardowych nagłówków biblioteka języka 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;
Firma Microsoft zaleca, aby wykorzystać using namespace w dyrektywie w pliku .cpp, aby kod był bardziej czytelny.
Zainicjować wątku, w którym wykonuje się aplikacja.Każda aplikacja musi zainicjować jego wątek 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 jest niszczony.
// Initialize the Windows Runtime. RoInitializeWrapper initialize(RO_INIT_MULTITHREADED); if (FAILED(initialize)) { return PrintError(__LINE__, initialize); }
W drugim instrukcja RoInitializeWrapper::HRESULT operator zwraca HRESULT wywołanie Windows::Foundation::Initialize.
Tworzenie factory 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 Jest ciągiem, który jest udostępniany przez Środowisko wykonawcze systemu Windows i zawiera nazwę klasy wymagane runtime.
Zainicjuj Microsoft::WRL::Wrappers::HString zmienna, 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, nie pamięć alokuje ciąg, który Środowisko wykonawcze systemu Windows będzie używany.Zamiast tego Środowisko wykonawcze systemu Windows tworzy kopię swojej 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 stworzyć 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); }
Call IUriRuntimeClass::get_Domain metoda pobierania wartość Domain właściwość.
// 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 RAII obiektów 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 kompletny przykład:
// 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 i następnie wkleić go w projekcie programu Visual Studio lub wklej go w pliku o nazwie światowym laboratorium referencyjnym zużywają component.cpp a następnie uruchom następujące polecenie w oknie wiersza polecenia usługi 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)