2016-10-22 3 views
0

Я пытаюсь позвонить get_Skus() методу IStoreProduct, чтобы получить его свойство Skus, используя C++/WRL (не C++/CX), и я не могу найти подходящих примеров кода. Этот метод определяется как таковой (как я понял из заголовка файла в Visual Studio):Как инициализировать экземпляр IVectorView для C++/WRL?

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 :: Окна :: Фонд :: Коллекции :: IVectorView' : Невозможно создать абстрактный класс

Я относительно не против WRL. Может ли кто-нибудь показать мне, как я должен назвать этот метод?

ответ

1

Вы забыли звезду - это должно было быть так:

IVectorView<StoreSku*>* pStrSkus; 

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

Еще лучше, если использовать ComPtr вместо этого, так что вам не придется освободить его вручную:

ComPtr<IVectorView<StoreSku*>> pStrSkus; 

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

Спасибо. Я знал, что это легко. – c00000fd

+0

Слушайте, это отдельный вопрос, но если мне нужно инициировать и передавать «IVector» 'HSTRING', как бы я это сделал? Практически это в C#, преобразованном в C++/WRL: 'string [] storeIds = new string [] {" 9NBLGGH4TNMP "," 9NBLGGH4TNMN "};' – c00000fd

+0

Вам необходимо создать класс, который реализует IVector . Проще всего сделать путем упаковки std :: vector . – Sunius

Смежные вопросы