我目前正在将 Boost 'filesystem' 库移植到 Windows Phone 8.1。通过用其他较新的非禁止函数替换“禁止”的 Win32 API 函数,我成功地移植了大约一半的有问题的函数。
我现在需要处理那些没有替代 Win32 API 的 Boost 函数。基于 Steve Gates 对 WP8.1 的其他 Boost 库的出色移植,在与他的私人交流中,我决定在 Boost 代码中使用 WRL,而不是 C++/CX。
为了学习 WRL 并了解我的方向,我编写了一个最小的 WP8.1 应用程序,该应用程序由一个 C++/CX 客户端应用程序组成,该应用程序调用 Windows 运行时组件,后者是用 C++ 编写的。在运行时组件中,我有一个函数试图确定图片库的文件系统路径。我遇到的问题是我得到的最终路径(即 pszPath)是一个空字符串。
这是运行时组件代码:
void Class1::Test1()
{
HRESULT hr;
HString hstrKnownFolders;
hstrKnownFolders.Set(RuntimeClass_Windows_Storage_KnownFolders);
// Get the Activation Factory
ComPtr<IActivationFactory> pKnownFoldersActivationFactory;
hr = ABI::Windows::Foundation::GetActivationFactory(hstrKnownFolders.Get(),
&pKnownFoldersActivationFactory);
if (FAILED(hr))
{
::Microsoft::WRL::Details::RaiseException(hr);
}
// QI for the IKnownFoldersStatics
ComPtr<IKnownFoldersStatics> pKnownFolders;
hr = pKnownFoldersActivationFactory.As(&pKnownFolders);
if (FAILED(hr))
{
::Microsoft::WRL::Details::RaiseException(hr);
}
// Get the Pictures library folder
ComPtr<IStorageFolder> pStorageFolder;
hr = pKnownFolders->get_PicturesLibrary(&pStorageFolder);
if (FAILED(hr))
{
::Microsoft::WRL::Details::RaiseException(hr);
}
// QI for the IStorageItem interface (from which IStorageFolder is derived)
ComPtr<IStorageItem> pItem;
hr = pStorageFolder.As(&pItem);
// Get the path corresponding to the folder
HSTRING hsPath;
pItem->get_Path(&hsPath);
PCWSTR pszPath = WindowsGetStringRawBuffer(hsPath, 0);
}
在函数结束时,函数 get_Path() 返回一个空字符串。谁能阐明我做错了什么,应该怎么做?
提前致谢!