c++ - 如何为 C++/WRL 初始化 IVectorView 实例?

标签 c++ windows-runtime windows-store-apps windows-10 wrl

我正在尝试调用 IStoreProductget_Skus() 方法来检索其 Skus属性(property)使用 C++/WRL (不是 C++/CX),我找不到任何合适的代码示例。该方法的定义如下(我从 Visual Studio 的头文件中获取它):

virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Skus( 
        /* [out][retval] */ __RPC__deref_out_opt IVectorView<ABI::Windows::Services::Store::StoreSku*> **value) = 0;

所以当我尝试这样做时:

#include <Windows.Services.Store.h>
#include <wrl.h>

using namespace ABI::Windows::Services::Store;
using namespace ABI::Windows::Foundation::Collections;

IVectorView<StoreSku*> pStrSkus;

//IStoreProduct* pStorePrdct = ...;
if (SUCCEEDED(pStorePrdct->get_Skus(&pStrSkus)))
{
}

它给了我一个错误:

'ABI::Windows::Foundation::Collections::IVectorView' : cannot instantiate abstract class

我对 WRL 还比较陌生。有人可以告诉我如何调用该方法吗?

最佳答案

你忘记了一颗星星 - 应该是这样的:

IVectorView<StoreSku*>* pStrSkus;

if (SUCCEEDED(pStorePrdct->get_Skus(&pStrSkus)))
{
    ...
    pStrSkus->Release();
}

更好的是,使用 ComPtr 代替,这样您就不必手动释放它:

ComPtr<IVectorView<StoreSku*>> pStrSkus;

if (SUCCEEDED(pStorePrdct->get_Skus(&pStrSkus)))
{
    ...
}

关于c++ - 如何为 C++/WRL 初始化 IVectorView 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40190165/

相关文章:

c++ - 将 key 传递给 Crypto++ 中的 AES 解密

windows-8 - Windows 8 WinRT KeyboardCapabilities.KeyboardPresent 始终为真

c++ - 如何在 Windows Phone 8 中获取程序包名称

windows-runtime - Windows Store TemporaryFolder - 内容的生命周期?

c# - 如何在 Windows 应用程序的后台监视文件夹的变化?

c++ - 函数定义末尾的 "const"是什么意思(在上下文中)?

c++ - 如果我传递的只是一个字符,我应该传递一个常量引用吗?

c++ - 传递 char ** 作为引用并返回 const char * 作为引用

powershell - 如何卸载其他用户安装的应用程序?

c# - Windows 商店应用程序中的 TypeLoadException