2016-10-22 3 views
0

Ich versuche get_Skus() Methode von IStoreProduct aufrufen, um seine Skus Eigenschaft mit C++/WRL (nicht C++/CX) abrufen, und ich kann keine geeigneten Codebeispiele finden. Diese Methode wird als solche definiert (wie ich sie von der Header-Datei in Visual Studio erhalten):Wie initialisiert man eine Instanz von IVectorView für C++/WRL?

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

Also, wenn ich versuche zu tun:

#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))) 
{ 
} 

es gibt mir einen Fehler, dass:

'ABI :: Windows :: Foundation :: Sammlungen :: IVectorView' : nicht abstrakte Klasse instanziiert

Ich bin relativ neu zu WRL. Kann mir jemand zeigen, wie soll ich diese Methode nennen?

Antwort

1

Sie haben vergessen, einen Stern - es war dies sein sollte: es manuell

IVectorView<StoreSku*>* pStrSkus; 

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

noch besser, eine ComPtr verwenden stattdessen so müssen Sie nicht loslassen:

ComPtr<IVectorView<StoreSku*>> pStrSkus; 

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

Dank. Ich wusste, es war einfach. – c00000fd

+0

Hör zu, es ist eine separate Frage, aber wenn ich einen 'IVektor' von' HSTRING' initiieren und weitergeben muss, wie würde ich es tun? Ziemlich genau das in C# umgewandelt in C++/WRL: 'string [] storeIds = new string [] {" 9NBLGGH4TNMP "," 9NBLGGH4TNMN "};' – c00000fd

+0

Sie müssen eine Klasse erstellen, die IVector implementiert. Am einfachsten ist es, wenn Sie std :: vector einfügen. – Sunius

Verwandte Themen