Variableninhalt als Teil von einem Befehl

  • Hallo Zusammen,
    ich möchte gerne den Variableninhalt als Teil von einem Befehl nutzen.

    In der DLL-Kommunikation wird ein Array wie folgt gelesen:
    $ANTWORT_BYTE11 = DllStructGetData($struct, 1,1)
    $ANTWORT_BYTE12 = DllStructGetData($struct, 1,2)
    $ANTWORT_BYTE13 = DllStructGetData($struct, 1,3)
    $ANTWORT_BYTE21 = DllStructGetData($struct, 2,1)
    $ANTWORT_BYTE22 = DllStructGetData($struct, 2,2)
    $ANTWORT_BYTE23 = DllStructGetData($struct, 2,3)

    Ich würde aber gerne mit einem Alias arbeiten etwa so:
    $DATENBYTE_HOLGER='1,1'
    $DATENBYTE_PETER='1,2'
    $DATENBYTE_JOSEF='1,3'
    $DATENBYTE_WERNER='2,1'
    $DATENBYTE_DANIEL='2,2'
    $DATENBYTE_PATRIK='2,3'
    $ANTWORT_BYTE11 = DllStructGetData($struct, $DATENBYTE_HOLGER)
    $ANTWORT_BYTE12 = DllStructGetData($struct, $DATENBYTE_PETER)
    $ANTWORT_BYTE13 = DllStructGetData($struct, $DATENBYTE_JOSEF)
    $ANTWORT_BYTE21 = DllStructGetData($struct, $DATENBYTE_WERNER)
    $ANTWORT_BYTE22 = DllStructGetData($struct, $DATENBYTE_DANIEL)
    $ANTWORT_BYTE23 = DllStructGetData($struct, $DATENBYTE_PATRIK)

    Diese Form hat den Vorteil, wenn sich was im Array verschiebt, dann muß ich nur den Alias neue Werte geben und mein Code bleibt unberührt.

    Mein gezeigtes Beispiel funktioniert so natürlich nicht, da AutoIT dies nicht als Befehl interpretiert.

    Hat einer eine Idee, wie man das umsetzen könnte?

    Vielen Dank für eure Bemühungen.

    Gruß
    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • [autoit]

    $bytestruct="byte Holger;byte Peter;byte Josef"
    $struct=dllstructcreate($bytestruct)
    dllstructsetdata($struct,"Holger",128)

    [/autoit][autoit][/autoit][autoit]

    $antwort_Holger=dllstructgetdata($struct,"Holger")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $antwort_Holger = ' & $antwort_Holger & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit][autoit][/autoit][autoit]

    $bytestruct="byte Luna;Byte Mira;" & $bytestruct ;struct erweitern
    $struct=dllstructcreate($bytestruct)

    [/autoit][autoit][/autoit][autoit]

    dllstructsetdata($struct,"Holger",128)

    [/autoit][autoit][/autoit][autoit]

    $antwort_Holger=dllstructgetdata($struct,"Holger")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $antwort_Holger = ' & $antwort_Holger & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit]

    Wenn du es intelligent anstellst, dann erweiterst du die dllstruct nach "hinten" und erstellst sie an der Position der ursprünglichen Struct =dllstructcreate($bytestruct & $Erweiterung,dllstructgetptr($struct))
    Dann bleiben die ursprüngliche Inhalte erhalten!

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    2 Mal editiert, zuletzt von Andy (6. März 2015 um 18:54)

  • So vielleicht?

    [autoit]


    Local $ANTWORT_BYTE12 = DllStructGetData($struct, 1,2)

    [/autoit][autoit][/autoit][autoit]

    Local $Return = Call( $ANTWORT_BYTE12 )

    [/autoit]

    ~IRC: irc.afterworkchat.de #autoit

  • Ansonsten wäre es z.B. auch noch so möglich:

    Spoiler anzeigen
    [autoit]

    $DATENBYTE_HOLGER='1,1'
    $DATENBYTE_PETER='1,2'
    $DATENBYTE_JOSEF='1,3'
    $DATENBYTE_WERNER='2,1'
    $DATENBYTE_DANIEL='2,2'
    $DATENBYTE_PATRIK='2,3'
    $ANTWORT_BYTE11 = _DllStructGetData($struct, $DATENBYTE_HOLGER)
    $ANTWORT_BYTE12 = _DllStructGetData($struct, $DATENBYTE_PETER)
    $ANTWORT_BYTE13 = _DllStructGetData($struct, $DATENBYTE_JOSEF)
    $ANTWORT_BYTE21 = _DllStructGetData($struct, $DATENBYTE_WERNER)
    $ANTWORT_BYTE22 = _DllStructGetData($struct, $DATENBYTE_DANIEL)
    $ANTWORT_BYTE23 = _DllStructGetData($struct, $DATENBYTE_PATRIK)

    [/autoit] [autoit][/autoit] [autoit]

    Func _DllStructGetData($tStruct, $vData)
    Local $asSplit = StringSplit($vData, ',')
    Return DllStructGetData($tStruct, $asSplit[1], $asSplit[2])
    EndFunc

    [/autoit]
  • Hallo Zusammen,
    sorry für die späte Antwort -> Meine Family war das WE Krank <X .

    @Andy: Deine Lösung funktioniert wie immer tadellos. Allerdings kommuniziere ich später mit >256 Elementen und da finde ich das ein wenig unübersichtlich.

    @Photon: Das war nicht ganz, was ich gesucht habe.

    @ShitDown: Deine Lösung hat mich zur meiner Variante inspiriert.

    Hier meine jetztige Variante:

    Spoiler anzeigen

    ...und hier das ganze ohne Funktion

    Spoiler anzeigen

    Nochmals vielen Dank für die guten Ideen!

    Gruß
    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...