Grösse eines Safearrays



  • Hallo,

    kurz und knapp:
    Wie kann ich die Grösse eines SafeArrays ermitteln?

    Besten Dank für eure Antworten!



  • Hallo,

    was ist ein SafeArray?

    mfg
    v R



  • SAFEARRAY ist ein VisualBasic DATENTYP, der auch bei COM/COM+ - Schnittstellen verwendet wird.

    Bzw. wenn man die Rückgabewerte einer COM in ein ARRAY packen möchte, so kriegt man zunächst ein SAFEARRAY zurück (VB-array), den man für C zugänglich machen sollte.

    Das Ding kann man selbstverständlich auch in C++ verwenden.

    Guckst du hier



  • Was meinst du mit Größe ? Die Anzahl der Elemente ? Die Bytes im Speicher ?

    Auf beides kannst du dir selbst eine Antwort geben durch deine eigenen Links. Da ist beschrieben wie so ein SAFEARRAY aufegbaut ist.

    Zusätzlich evtl. noch folgendes : SAFEARRAY



  • Achso. Na, schau dir doch mal den ersten Link deiner google-Suche an. Besonders
    die Struktur + den Erklaerungen der msdn.

    mfg
    v R



  • Jupp, auf meinen eignen Link war ich natürlich scho drauf, bin aber irgendwie nicht schlau draus geworden. Es müsste doch irgend einen Befehl à la "SafeArrayGetSize()" geben.
    Gemeint ist übrigens die Anzahl der Elemente!



  • Wenn du ne fertige Funktion suchst frag mal im WinAPI-Forum.
    Hier kann ich nur soviel dazu sagen:

    typedef struct tagSAFEARRAY
    {
    
        USHORT cDims;                        // Number of dimensions
        USHORT fFeatures;                    // Misc flags inc element type
        ULONG cbElements;                    // Element size
        ULONG cLocks;                        // Lock count
        PVOID pvData;                        // Pointer to data
        SAFEARRAYBOUND rgsabound[ cDims];    // Array of dimension structures    
    
    } SAFEARRAY;
    
    // SAFEARRAY Dimension structure
    typedef struct tagSAFEARRAYBOUND
    {
    
        ULONG cElements;       // Number of elements in dimension
        LONG lLbound;          // Lower bound of dimension (usually 0)                    
    
    } SAFEARRAYBOUND;
    
    //Das ist eigentlich alles was du wissen musst um an die Anzahl der Elemente zu kommen
    //Addier einfach die Anzahl der Elemente in jeder Dimension
    //Wenn jede Dimension gleichviele Elemente hat dann multipliziere die Dimensionen mit den Elementen
    
    //---- snip ---------
    SAFEARRAY array;
    
    array.cDims; //<--- Das ist die Anzahl der Dimensionen
    array.rgsabound[0].cElements; //<--- Anzahl der Elemente in Dimension 0
    
    //------ snap ------
    


  • Ok, ich versuch das mal zu verwerten!

    Besten Dank schon mal!


Anmelden zum Antworten