Problem mit VARIANT-array



  • Hi Leute,
    Ich hab mal wieder ein Problem:
    Ich habe hier ne Funktion (eines COM-Objektes) die erwartet als ersten Parameter einen VARIANT. In der Beschreibung zu der Funktion steht: "Specifies an array of stroke IDs"
    Also habe ich versucht ein Array anzulegen. Für den Anfang nur mit einem Element:

    long ID = GetID();		
    SAFEARRAYBOUND rgsabound[1];
    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = 1;
    
    long Indicies[1];
    Indicies[0]=0;
    SAFEARRAY *ar = SafeArrayCreate(VT_I4,1,rgsabound);
    CComVariant varID(ID,VT_I4);
    SafeArrayPutElement(ar,Indicies,&varID);
    VARIANT vr;
    vr.parray=ar;
    vr.vt= VT_I4|VT_ARRAY;
    

    ID ist die stroke ID.

    Die Funktion, der ich den VARIANT vr jetzt übergeb gibt aber immer zurück, dass was nicht stimmt.
    Liegt das an meinem Array? Hab nämlich noch nie was mit VARIANTs gemacht, deshalb wäre es gut möglich, dass ich hierbei alles falsch mach.

    P.S. In der C#-Version der Funktion ist der Parameter als "int[] ids" definiert, deswegen habe ich oben vr.vt = VT_I4|VT_ARRAY gemacht.



  • dEUs schrieb:

    CComVariant varID(ID,VT_I4);
    SafeArrayPutElement(ar,Indicies,&varID);
    

    Der 'Pointer to the data to assign to the array' ist ein VARIANT-Pointer. Du wolltest doch aber einen Integer speichern. Das sollte eher so aussehen:

    SafeArrayPutElement(ar,Indicies,&ID);
    

    BTW: Für solche Arrays finde ich SafeArrayCreateVector ganz praktisch. Du sparst Dir dann das Gedödel mit der SAFEARRAYBOUND-Struktur.

    dEUs schrieb:

    Die Funktion, der ich den VARIANT vr jetzt übergeb gibt aber immer zurück, dass was nicht stimmt.

    Nur nicht zuviel verraten. Ich für meinen Teil habe jedenfalls an dieser Stelle den Fehlercode erwartet. Ist der wirklich so geheim?



  • Oh, die Funktion sieht schön aus 🙂 Danke 👍

    Der Rückgabewert ist:
    TPC_E_INVALID_STROKE - Stroke IDs that do not exist were passed to the method.

    Da das ein spezieller des SDKs ist, habe ich ihn nur beschrieben ...



  • Also darf ich davon ausgeheen, daß es jetzt funktioniert?



  • Darfst du 🙂
    Nochmals danke.


Anmelden zum Antworten