1

我正在尝试使用C++/WRLget_Skus() (不是 C++/CX)调用方法IStoreProduct来检索其Skus属性,但找不到任何合适的代码示例。该方法是这样定义的(我从 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':无法实例化抽象类

我对WRL. 有人可以告诉我我应该如何调用该方法吗?

4

1 回答 1

1

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

IVectorView<StoreSku*>* pStrSkus;

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

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

ComPtr<IVectorView<StoreSku*>> pStrSkus;

if (SUCCEEDED(pStorePrdct->get_Skus(&pStrSkus)))
{
    ...
}
于 2016-10-22T18:05:29.053 回答