Leeres Array an c++ übergeben und gefüllt zurück bekommen ??

  • VB6

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Derfuhr.

    Leeres Array an c++ übergeben und gefüllt zurück bekommen ??

    Hey,


    kurze Frage.

    Hat jemand von euch Erfahrung damit ein leeren als Type definierten Array von Visual Basic 6 an eine in C++ geschriebene DLL zu übergeben und ein gefülltes Array zurück zu bekommen ?

    Ich versuche schon die ganze Zeit das hinzubekommen. Habe noch einen weiteren Parameter (Anz) der von der DLL gefüllt wird...


    Kann mir eventuell jemand bei dem Problem helfen ?
    Da ich die DLL nicht kenne, kann ich nur vermuten. Versuch mal folgendes:

    Visual Basic-Quellcode

    1. Dim TestArray() As CPeriodInfo
    2. Dim Anz As Long
    3. Dim ret As Long = GetPeriodInfo(2014, 1, 24, 2014, 1, 31, TestArray, Anz, 0, 0)
    4. Dim i as Integer
    5. For i = 0 to TestArray.Lenght -1
    6. MsgBox(TestArray(i).lStartPoint)
    7. Next
    ret hat den wert 1. Ich erwarte eigentlich z.B. für lStartPoint -> 1 ; für lStopPoint -> 101 und für Typ -> 1

    ich habe versucht das ganze irgendwie über CopyMemory zu regeln, aber da bekomme ich nur die Adressen des Arrays geliefert.
    Hmm.. Ich habe es so verstanden, dass ich als Quelle die Adresse des Arrays angebe und dann die Adresse an ein Ziel übergebe :D
    Jetzt bin ich noch mehr verwirrt :D

    Wenn ich folgenden code ausführe

    Visual Basic-Quellcode

    1. For i = 0 To UBound(TestArray)
    2. Call CopyMemory(TestArray(i), VarPtrArray(BitArray) + Len(BitArray(0)) * i, Len(BitArray(0)))
    3. Debug.Print TestArray(i).lStartPoint, TestArray(i).lStopPoint, TestArray(i).Typ
    4. Next i



    Dann erhalte ich folgende Werte :

    1637196 129181472 0
    1637205 129181472 0
    1637214 129181472 0
    1637223 129181472 0
    1637232 129181472 0
    1637241 129181472 0
    1637250 129181472 0
    1637259 129181472 0
    1637268 129181472 0
    1637277 129181472 0
    1637286 129181472 0
    1637295 129181472 0
    1637304 129181472 0
    1637313 129181472 0
    1637322 129181472 0
    1637331 129181472 0
    1637340 129181472 0
    1637349 129181472 0
    1637358 129181472 0
    1637367 129181472 0
    1637376 129181472 0
    1637385 129181472 0
    1637394 129181472 0
    1637403 129181472 0
    1637412 129181472 0
    1637421 129181472 0
    1637430 129181472 0
    1637439 129181472 0
    1637448 129181472 0
    1637457 129181472 0


    Wo kommen dann diese Werte her ?(

    Dennis336 schrieb:

    Wo kommen dann diese Werte her


    Irgendwo aus dem RAM, TestArray(i) ist jedenfalls nicht die Speicheradresse. Lade dir einfach das Beispiel von CodeProject herunter, das ist ausreichend Dokumentiert, aber es könnte einen Haken geben mit CopyMemory, du musst dann die Speicheradresse der Variablen in der Dll finden und diese Werte aus´m Speicher kopieren, weil wenn dein Array so schon leer bleibt, wie sollte er dann im Ram gefüllt sein? Ausserdem müssen die Werte der Variablen in der dll erstmal erzeugt/geladen werden, das macht die DLL nicht von allein.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Derfuhr“ ()