Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The high level projection available in C++ targeting WinRT make working with WinRT from C++ a much easier task. It handles error reporting, reference counting, string conversions etc for you. As an example let's consider the following high level C++ code to retrieve the path of the temporary folder:
void GetTempFolderPathHighLevel(std::wstring& path)
{
path = Windows::Storage::ApplicationData::Current->TemporaryFolder->Path->Data();
}
Short, simple, and to the point. The equivalent low level code to get this is heinous:
#include <windows.storage.h>
#include <wrl/client.h>
#include <wrl/wrappers/corewrappers.h>
HRESULT GetTempFolderPath(std::wstring& path)
{
HRESULT hr;
Microsoft::WRL::ComPtr<ABI::Windows::Storage::IApplicationDataStatics> applicationDataStatics;
hr = Windows::Foundation::GetActivationFactory(Microsoft::WRL::Wrappers::HStringReference(RuntimeClass_Windows_Storage_ApplicationData).Get(), &applicationDataStatics);
if (FAILED(hr))
{
return hr;
}
Microsoft::WRL::ComPtr<ABI::Windows::Storage::IApplicationData> applicationData;
hr = applicationDataStatics->get_Current(&applicationData);
if (FAILED(hr))
{
return hr;
}
Microsoft::WRL::ComPtr<ABI::Windows::Storage::IStorageFolder> storageFolder;
hr = applicationData->get_TemporaryFolder(&storageFolder);
if (FAILED(hr))
{
return hr;
}
Microsoft::WRL::ComPtr<ABI::Windows::Storage::IStorageItem> storageItem;
hr = storageFolder.As(&storageItem);
if (FAILED(hr))
{
return hr;
}
HSTRING folderName;
hr = storageItem->get_Path(&folderName);
if (FAILED(hr))
{
return hr;
}
UINT32 length;
PCWSTR value = WindowsGetStringRawBuffer(folderName, &length);
path = value;
WindowsDeleteString(folderName);
return S_OK;
}
Comments
Anonymous
April 10, 2012
Do you need to release HSTRING from get_Path ? WindowsDeleteString ?Anonymous
April 10, 2012
Could you tell me any document on ABI ?