Array Deklaration als Parameter übergeben

  • Hi Leute,
    ist sowas ähnliches vllt. möglich?

    [autoit]


    Test([$a, $b, $c, $d])

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

    Func Test($aArray)
    ; mach was
    EndFunc

    [/autoit]

    Hat was von python und anderen, hat jemand ne idee, ob das irgendwie möglich ist?

    Danke!

  • An eine Funktion hatte ich auch schon gedacht. Ich brauche die Deklaration des Array nicht, so spare ich mir die Zeile und es wird übersichtlicher, vorallem wenn man mehrere Aufrufe der selben Funktion hat, aber mit anderen Parametern.

    Dachte mir schon, das es nicht direkt möglich ist. Danke.

  • Wenn ich StringSplit benutze und ein Dictionary mit reingebe, verliert es logischerweise die Daten und sowieso kann ich nicht mit strings arbeiten, wo handles und IDs benötigt werden.

    Ich brauch eine Funktion, die n-Parameter aufnimmt, daraus ein Array bildet und es zurückgibt.
    Geht sowas?

    • Offizieller Beitrag

    Ich brauch eine Funktion, die n-Parameter aufnimmt, daraus ein Array bildet und es zurückgibt.
    Geht sowas?


    Mit undefiniert vielen Parametern geht das nicht. Wenn du aber weisst, dass z.B. nicht mehr als 10 Parameter jemals verwendet werden, kannst du sowas machen:

    [autoit]


    Function _bla($p1, $p2=Chr(0), $p3=Chr(0), $p4=Chr(0), $p5=Chr(0), $p6=Chr(0), $p7=Chr(0), $p8=Chr(0), $p9=Chr(0), $p10=Chr(0))
    Local $aParam[10] = [$p1, $p2, $p3, $p4, $p5, $p6, $p7, $p8, $p9, $p10]
    For $i = 1 To 9
    If $aParam[$i] = Chr(0) Then ExitLoop
    Next
    ReDim $aParam[$i]
    Return $aParam
    EndFunc

    [/autoit]
  • Schade das AutoIt so viele limitations hat :(

    Nichts, was sich nicht beheben lässt. Zumindest nicht in diesem Fall.

    BugFix Dafür gibt es doch extra @NumParams:

    [autoit]

    Func array($Value1, $Value2=0, $Value3=0, $Value4=0, $Value5=0, $Value6=0, $Value7=0, $Value8=0, $Value9=0, $Value10=0, $Value11=0, $Value12=0, $Value13=0, $Value14=0, $Value15=0, $Value16=0, $Value17=0, $Value18=0, $Value19=0, $Value20=0, $Value21=0, $Value22=0, $Value23=0, $Value24=0, $Value25=0, $Value26=0, $Value27=0, $Value28=0, $Value29=0, $Value30=0, $Value31=0, $Value32=0, $Value33=0, $Value34=0, $Value35=0, $Value36=0, $Value37=0, $Value38=0, $Value39=0, $Value40=0, $Value41=0, $Value42=0, $Value43=0, $Value44=0, $Value45=0, $Value46=0, $Value47=0, $Value48=0, $Value49=0, $Value50=0, $Value51=0, $Value52=0, $Value53=0, $Value54=0, $Value55=0, $Value56=0, $Value57=0, $Value58=0, $Value59=0, $Value60=0, $Value61=0, $Value62=0, $Value63=0, $Value64=0, $Value65=0, $Value66=0, $Value67=0, $Value68=0, $Value69=0, $Value70=0, $Value71=0, $Value72=0, $Value73=0, $Value74=0, $Value75=0, $Value76=0, $Value77=0, $Value78=0, $Value79=0, $Value80=0, $Value81=0, $Value82=0, $Value83=0, $Value84=0, $Value85=0, $Value86=0, $Value87=0, $Value88=0, $Value89=0, $Value90=0, $Value91=0, $Value92=0, $Value93=0, $Value94=0, $Value95=0, $Value96=0, $Value97=0, $Value98=0, $Value99=0, $Value100=0, $Value101=0, $Value102=0, $Value103=0, $Value104=0, $Value105=0, $Value106=0, $Value107=0, $Value108=0, $Value109=0, $Value110=0, $Value111=0, $Value112=0, $Value113=0, $Value114=0, $Value115=0, $Value116=0, $Value117=0, $Value118=0, $Value119=0, $Value120=0, $Value121=0, $Value122=0, $Value123=0, $Value124=0, $Value125=0, $Value126=0, $Value127=0, $Value128=0, $Value129=0, $Value130=0, $Value131=0, $Value132=0, $Value133=0, $Value134=0, $Value135=0, $Value136=0, $Value137=0, $Value138=0, $Value139=0, $Value140=0, $Value141=0, $Value142=0, $Value143=0, $Value144=0, $Value145=0, $Value146=0, $Value147=0, $Value148=0, $Value149=0, $Value150=0, $Value151=0, $Value152=0, $Value153=0, $Value154=0, $Value155=0, $Value156=0, $Value157=0, $Value158=0, $Value159=0, $Value160=0, $Value161=0, $Value162=0, $Value163=0, $Value164=0, $Value165=0, $Value166=0, $Value167=0, $Value168=0, $Value169=0, $Value170=0, $Value171=0, $Value172=0, $Value173=0, $Value174=0, $Value175=0, $Value176=0, $Value177=0, $Value178=0, $Value179=0, $Value180=0, $Value181=0, $Value182=0, $Value183=0, $Value184=0, $Value185=0, $Value186=0, $Value187=0, $Value188=0, $Value189=0, $Value190=0, $Value191=0, $Value192=0, $Value193=0, $Value194=0, $Value195=0, $Value196=0, $Value197=0, $Value198=0, $Value199=0, $Value200=0, $Value201=0, $Value202=0, $Value203=0, $Value204=0, $Value205=0, $Value206=0, $Value207=0, $Value208=0, $Value209=0, $Value210=0, $Value211=0, $Value212=0, $Value213=0, $Value214=0, $Value215=0, $Value216=0, $Value217=0, $Value218=0, $Value219=0, $Value220=0, $Value221=0, $Value222=0, $Value223=0, $Value224=0, $Value225=0, $Value226=0, $Value227=0, $Value228=0, $Value229=0, $Value230=0, $Value231=0, $Value232=0, $Value233=0, $Value234=0, $Value235=0, $Value236=0, $Value237=0, $Value238=0, $Value239=0, $Value240=0, $Value241=0, $Value242=0, $Value243=0, $Value244=0, $Value245=0, $Value246=0, $Value247=0, $Value248=0, $Value249=0, $Value250=0, $Value251=0, $Value252=0, $Value253=0, $Value254=0, $Value255=0)
    Local $Array[@NumParams], $i
    For $i = 1 To @NumParams
    $Array[$i-1] = Eval("Value" & $i)
    Next
    Return $Array
    EndFunc

    [/autoit]
  • Hi,

    Zitat von BugFix

    Ich weiß - aber dann muss man Eval nutzen, was ich möglichst vermeide.

    Eval "muss" man ja nur benutzen, weil "man" zu faul ist, die Zeilen alle untereinander auszuschreiben...

    Spoiler anzeigen
    [autoit]

    Switch @NumParams
    Case 3
    $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi)
    Case 5
    $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1)
    Case 7
    $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2)
    Case 9
    $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3)
    Case 11
    $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4)
    Case 13
    $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4, $Type5, $Param5)
    Case Else
    Local $DllCallStr = 'DllCall($_KERNEL32DLL, $RetType, $_MFHookApi', $n = 1
    For $i = 5 To @NumParams Step 2
    $DllCallStr &= ', $Type' & $n & ', $Param' & $n
    $n += 1
    Next
    $DllCallStr &= ')'
    $Ret = Execute($DllCallStr)
    EndSwitch

    [/autoit]