Exchange Variables UDF Beta

  • Mit dieser UDF kann man ganz einfach Variablen zwischen mehreren verschiedenen Autoitprogrammen austauschen.

    Die Beispiele sind hoffentlich selbsterklärend und ich spare mir jetzt mal eine Beschreibung... ^^
    Am besten als EXE kompilieren und beide Scripte eines Beispiels starten.


    Ich konnte das bisher nur auf einem Rechner mit Win_XP testen - hoffentlich funktioniert das auch auf anderen Systemen.

    Verbesserungen, Einwände, Praxistauglichkeitsfeedbacks oder sonstige Kommentare sind natürlich herzlich Willkommen.

    E

    EDIT:
    Nun kann man auch DllStructs verschicken.

    Die Variablen werden zunächst in Strings umgewandelt, dann verschickt und im Empfängerscript wieder zurückverwandelt.
    Da dies bei großen Datenmengen (sehr lange Strings/Binaries oder große Arrays) natürlich Zeit beansprucht, ist die beste Variante das Versenden von DLLStructs.
    Bei DLLStructs werden nur PID,Pointer & StructType verschickt und dann ausgelesen, dabei ist es egal wie groß die enthaltene Datenmenge ist.
    Siehe Beispiel 3

  • Neue Version

    Nun geht auch das Versenden von DllStructs.
    Bisher wurde nur der Pointer verschickt.
    Nun werden alle benötigten Daten (PID, Pointer, Structtype) verschickt und im Empfängerscript eine equivalente DllStruct erstellt.
    Die in der Struct enthaltene Datenmenge spielt dabei keine Rolle.

    E

  • Hallo eukalyptus,

    vielen Dank für diese UDF Sammlung :). Ich verwende sie jetzt wie hier besprochen um Bitmaps von einem an ein anderes Script zu übertragen, funktioniert tadellos :).

    Ein Bug ist mir jetzt aber aufgefallen. Ich übertrage eine Liste an zu bearbeitenden Elementen als 2D Array per _ExchangeVariables_SetVariable(). Wenn ich mir im Zielprogramm das empfangene Array nun per _ArrayDisplay() anschaue, enthält das allerletzte Element am Ende immer noch den Delimiter.

    Ich denke das müsste in der Funktion __ExchangeVariables_StringToArray($sString) behoben werden. Da ich immer nur 2D Arrays übertrage, habe ich einen Workaround eingefügt. Statt

    [autoit]

    Case 2
    Local $aReturn[$aDim[1] + 1][$aDim[2] + 1]
    For $1 = 0 To $aDim[1]
    For $2 = 0 To $aDim[2]
    $aReturn[$1][$2] = __ExchangeVariables_StringToVariant(StringTrimLeft($aSplit[$iCnt], 2), StringLeft($aSplit[$iCnt], 2))
    $iCnt += 1
    Next
    Next
    Return $aReturn

    [/autoit]

    steht bei mir nun

    [autoit]

    Case 2
    Local $aReturn[$aDim[1] + 1][$aDim[2] + 1]
    For $1 = 0 To $aDim[1]
    For $2 = 0 To $aDim[2]
    $aReturn[$1][$2] = __ExchangeVariables_StringToVariant(StringTrimLeft($aSplit[$iCnt], 2), StringLeft($aSplit[$iCnt], 2))
    $iCnt += 1
    Next
    Next
    $aReturn[$aDim[1]][$aDim[2]] = StringReplace(StringStripWS(StringReplace($aReturn[$aDim[1]][$aDim[2]],"|",""),2),Chr(1),"")
    Return $aReturn

    [/autoit]

    dann funktioniert die Übertragung reibungslos. Bin mir nicht sicher, an welcher Stelle das Problem grundsätzlich zu lösen wäre :)...

    Vielen Dank für deine tolle Arbeit und ein frohes neues Jahr :)!

  • Hallo eukalyptus,

    hab nen zweiten kleinen Bug gefunden :). Das zweite Element meines 2D Arrays ist ein Dateiname. Dieser kann natürlich auch in Unicode sein. Unicode wird aber anscheinend vom Array Wrapper irgendwie verbaselt. Meine temporäre Lösung: Ich wandele die Strings (Array-Elemente) im Sender nach ANSI um und im Empfänger dann wieder nach UNICODE.

    [autoit]

    Func _UNICODE2ANSI($sString = "")
    ; Convert UTF8 to ANSI to insert into DB

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

    ; http://www.autoitscript.com/forum/index.ph…ndpost&p=614497
    ; ProgAndy
    ; Make ANSI-string representation out of UTF-8

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

    Local Const $SF_ANSI = 1
    Local Const $SF_UTF8 = 4
    Return BinaryToString(StringToBinary($sString, $SF_UTF8), $SF_ANSI)
    EndFunc ;==>_UNICODE2ANSI

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

    Func _ANSI2UNICODE($sString = "")
    ; Extract ANSI and convert to UTF8 to display

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

    ; http://www.autoitscript.com/forum/index.ph…ndpost&p=614497
    ; ProgAndy
    ; convert ANSI-UTF8 representation to ANSI/Unicode

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

    Local Const $SF_ANSI = 1
    Local Const $SF_UTF8 = 4
    Return BinaryToString(StringToBinary($sString, $SF_ANSI), $SF_UTF8)
    EndFunc ;==>_ANSI2UNICODE

    [/autoit]

    Gruß

  • ich habe einfe frage zu deiner udf, zwischen wie vielen scripten kann man kommunizieren?
    geht zb: _ExchangeVariables_SetVariable(5, "Variable", $Variable) ?

    bzw. gibt es noch eine andere sinnvolle Lösung variablen bzw. Arrays zwischen 6 Scripten auszutauschen?

  • Ich finde das teil klasse und habs gleich eingebaut .... leider bekomme ich es nicht hin mit einem script beides zu sein, also sowohl empfänger als auch sender ... oder ist das nicht möglich?