Gå til innhold

Problemer med bruk av VARIANT


Anbefalte innlegg

Jeg skal kalle på IUPnPService::InvokeAction og i den forbindelse har jeg kommet borti VARIANT for første gang.

Den actionene jeg skal kalle på har ingen inn verdier så etter deg jeg har lest skal jeg lage en tom array og det har jeg ikke skjønt hvordan jeg skal gjøre. Jeg får feil at argument typen ikke stemmer.

 

VARIANT vaInArgs;
VARIANT vaOutArgs;
VARIANT vaRet;
vaInArgs.vt = (VT_ARRAY | VT_EMPTY);
vaOutArgs.vt = (VT_ARRAY | VT_EMPTY);
vaRet.vt = (VT_ARRAY | VT_EMPTY);
hr = pService->InvokeAction(ActionName, vaInArgs, &vaOutArgs, &vaRet);

 

Jeg har sett på safearray, men da må jeg spesifisere størrelsen som jeg ikke har, så derfor tror jeg ikke det er riktig å bruke den, men jeg har jo tatt feil før.

 

Takker på forhånd for alle svar.

Lenke til kommentar
Videoannonse
Annonse

C++ forumet er kanskje mer passende :p

 

"All arrays in variants must be allocated with SafeArrayCreate"

 

så det er nok rette veien å gå.

 

I vanlig C++ er det ingen problemer med å allokere null byte, så jeg går utifra at du bare kan kalle den med 0

 

SAFEARRAY *arr;
SAFEARRAYBOUND bnds;
bnds.Lbound = 0;
bnds.cElements = 0;

if( !(arr = SafeArrayCreate(VT_VARIANT, 0, &bnds)) )
 cerr << "Out of memory";

Uten at jeg har testet dette i det hele tatt, og er kun basert på hva jeg tror.

Lenke til kommentar

Jeg legger posten her siden den passer i c++ og win32, men det er ingen c++ person som kan hjelpe meg uten erfaring med win32. Og feilen ligger innenfor win32 feltet. (mulig jeg tar feil, men sånn tenker jeg)

 

Nå har jeg prøvd å SafeArrayCreate men jeg får fortsatt samme feilen Type mismatch (0x80020005L).

 

Men jeg lurer på om feilen ligger i VARIANT::vt som jeg har prøvd å sette til

VT_ARRAY og/eller VT_EMPTY. Jeg har også prøvd å sette array størelsen til 10 uten at det hadde noen effekt.

 

Men hvis jeg kjører med actionname som noe rart noe så får jeg samme feilen, så det er mulig at jeg sender navnet inn på feil måte, men jeg har ikke sett noe annet som tyder på det.

 

Jeg legger ved en zip fil med de nødvendige filene for å teste, men for å teste dette trenger man en Upnp ruter tilkoblet, hvis det ikke finnes en slik ruter vil nok koden klikke (siden jeg ikke har kommet så langt i kodingen)

 

man trenger bare lage å gjøre dette.

#include "YNet.h"
NUPnP test;
test.FindDevices(TEXT("UPnP:rootdevice"));
test.FindWANConnectionDevice();

 

For visualisering av hva koden gjøre ambefaller jeg Intel Upnp toolkit

 

og i den pakken ligger et program som heter Device Spy.exe

 

Og jeg takker igjen for alle svar.

YNet.zip

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...