C++ DLL - Visual Basic - übergabe der Var.



  • Ja, aber warum fängt er dann nicht mit den 0ten Element an?

    Der erste Buchstabe hat Index(4) ....warum nicht Index(0) ?

    Danke



  • Hallo hätte wieder eine Frage:

    VB Programm aufruf:

    Dim feld(0 To 3) As Variant
       Set objAlgo = New Algo
    
       feld(0) = 4
       feld(1) = 2
       feld(2) = 3
       feld(3) = 1
       objAlgo.Add feld
    

    Jetzt müsste ich unter C++ DLL das Array übergeben. Problem ist jedoch das die Funktion/Schnittstelle Add auch Werte wie Integer und Strings übergeben werden können, und somit fordert die FKT Add einen VARIANT Datentyp. Ist dies nun möglich das ich das Feld an den Variant Datentyp übergebe und später die Daten auslese oder ist es nur mit dem von dir geschriebenen SafeArray(www.overclockers.at) möglich? (Funktion muss gleich heißen!)

    Wenn ich die ADD Funktion mit einem anderen zu erwartenden Parameter hinschreibe, dann kommt jedes Mal redefinition von Add.

    Wäre um jede Hilfe dankbar...



  • Passing an array from VC++ DLL to VB
    http://www.codeproject.com/dll/ctovbarray_passing.asp



  • testheini schrieb:

    Passing an array from VC++ DLL to VB

    Danke...ist aber leider nur ein SAFEARRAY - ich bekomme jedoch ein VARIANT als Übergabewert - und aus diesem Variant muss ich das Array heraus"filtern".

    von mat-oc.at

    "natürlich kannst du ein safearray auch als variant übergeben. dafür ist der variant ja vorhanden. check nochmal:" http://msdn.microsoft.com/library/default.asp?url=/library/en-us/automat/htm/chap6_7zdz.asp

    VT_ARRAY | <anything>



  • irgendwie komm ich mit der Auswertung des Feldes nicht weiter...

    dies wäre mein letztes zu lösendes Problem...wäre euch dankbar wenn Ihr mir helfen würdet...

    mfg
    chris



  • c147258 schrieb:

    Danke...ist aber leider nur ein SAFEARRAY - ich bekomme jedoch ein VARIANT als Übergabewert - und aus diesem Variant muss ich das Array heraus"filtern".

    Steht doch in der MSDN Library:

    MSDN (VT_ARRAY) schrieb:

    The pointer in pparray points to an array descriptor, which describes the dimensions, size, and in-memory location of the array. The array descriptor is never accessed directly, but instead is read and modified using the functions described in Conversion and Manipulation Functions.

    Wenn das nicht hilft, wäre eine genauere Problembeschreibung als "ich komme nicht weiter" hilfreich.



  • @MFK

    Danke..aber das Problem ist das ich mit dem meistens nichts anfangen kann und ein kleines Code- Beispiel anschaulicher wäre.

    Dim feld(0 To 3) As Variant
    Set objAlgo = New Algo
    
    feld(0) = 4
    feld(1) = 2
    feld(2) = 3
    feld(3) = 1
    objAlgo.Add feld
    

    Die Daten werden in C++ in eine doppelt verkettete Liste hineingespeichert (als Variant Datentyp). Jetzt müsste ich auf den Variant Datentyp zugreifen können, sodass ich das Feld (Array) auslesen kann.
    wäre dir sehr dankbar..

    🤡



  • c147258 schrieb:

    Danke..aber das Problem ist das ich mit dem meistens nichts anfangen kann und ein kleines Code- Beispiel anschaulicher wäre.

    Dann wird es vielleicht Zeit zu lernen, auch damit etwas anzufangen. Das ist keine Hexerei. Klar ist es angenehmer, wenn einem das vorgekaute Essen in den Mund gestopft wird. Aber irgendwann sollte man doch soweit sein, dass man nicht mehr gefüttert werden muss, oder? 😉

    Die Daten werden in C++ in eine doppelt verkettete Liste hineingespeichert (als Variant Datentyp).

    Das hat mit dem Problem nichts zu tun.

    Jetzt müsste ich auf den Variant Datentyp zugreifen können, sodass ich das Feld (Array) auslesen kann.

    Als welcher Typ kommt feld konkret in C++ an? VT_ARRAY | was?



  • MFK schrieb:

    . Aber irgendwann sollte man doch soweit sein, dass man nicht mehr gefüttert werden muss, oder? 😉

    jetzt hätt ich doch eh schon soviel leckeres gelernt..aber wenn ich mal nicht mehr weiterkomme, dann verzweifle ich 🙄
    bzw. bei einem Beispiel ist es leichter zu verstehen als wenn ich nur reine Theorie lesen muss ...

    MFK schrieb:

    Als welcher Typ kommt feld konkret in C++ an? VT_ARRAY | was?

    beim debuggen:
    variant_element 0x0012f674 {???}
    vt 24588
    dann kommt wReserved usw...

    wenn du etwas anderes bräuchtest bitte melden...danke 🤡 (find ich nice)



  • c147258 schrieb:

    bzw. bei einem Beispiel ist es leichter zu verstehen als wenn ich nur reine Theorie lesen muss ...

    Krabbeln ist auch einfacher als Laufen. Aber irgendwann hast du gemerkt, dass Laufen viel effektiver ist, wenn man es kann.

    vt 24588

    24588 ist VT_ARRAY | VT_BYREF | VT_VARIANT.
    Der Member pparray des Variant verweist also auf ein SafeArray mit VT_BYREF | VT_VARIANT-Einträgen.

    Versuch doch zuerst mal, die Anzahl der Dimensionen (sollte 1 sein) und die obere und untere Grenze für jede Dimension zu ermitteln (SafeArrayGetDim, SafeArrayGetLBound, SafeArrayGetUBound).



  • MFK schrieb:

    Krabbeln ist auch einfacher als Laufen. Aber irgendwann hast du gemerkt, dass Laufen viel effektiver ist, wenn man es kann.

    verflixt, du hast gute Argumente 😃

    naja..werd mal schauen was ich in 1 1/2 Tagen noch zusammenbringe, dann bin ich leider nicht mehr da (Ferialpraktikum)....

    mfg
    chris


Anmelden zum Antworten