如何为 C++/WRL 初始化 IVectorView 的实例?
How to initialize an instance of IVectorView for C++/WRL?
我正在尝试调用 IStoreProduct
的 get_Skus()
方法来检索它的 Skus property using 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)))
{
...
}
我正在尝试调用 IStoreProduct
的 get_Skus()
方法来检索它的 Skus property using 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)))
{
...
}