non-Array error beim _Imagesearch()

  • Hallöchen, ich hab da mal ne Frage: wenn ich via _ImageSearch ein Bild finden möchte, klappt das eigentlcih prima.

    Allerdings nur, wenn ich die datei selbst mit AutoIt ausführe. Die .au3 hab ich dann nichts ahnend zur exe compiliert und nem kunpl zeigen wollen, ging dann aber nich Fehler blablubb, ich dachte mir nix dabei.
    Dann hab ichs aber wieder an meinem pc probiert, und da kam dieselbe fehlermeldung:
    "Line 10 (File "C:\[...]\test.exe"):
    Error: Subcrip ued with non-Array variable."

    [autoit]

    #include <imagesearch.au3>

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

    HotKeySet("s","starten")
    HotKeySet("x","end")

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

    $x=0
    $y=0

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

    while 1
    sleep(20)
    WEnd

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

    Func starten()
    While 1
    $res=_ImageSearch("ecke.png",1,$x,$y,0)
    If $res=1 Then
    MouseMove($x,$y)
    EndIf
    WEnd
    EndFunc

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

    Func end()
    Exit
    EndFunc

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

    Was mache ich falsch? Wenn ich es via f5 ausführe funktioniert es ja einwandfrei :wacko:

  • Also sofern ich die derzeit aktuelle und richtige imagesearch.au3 gefunden habe wundert mich das nicht. Hier der problematische Abschnitt der UDF:

    [autoit]


    $result = DllCall("ImageSearchDLL.dll","str","ImageSearch","int",$x1,"int",$y1,"int",$right,"int",$bottom,"str",$findImage)

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

    ; If error exit
    if $result[0]="0" then return 0

    [/autoit]

    So was kann hier also schiefgehn? Angenommen die DLL ist nicht vorhanden, dann gibt die Funktion DLLCall kein Array zurück, sondern setzt nur @error. Prüft man nun ob Index 0 des Arrays 0 ist, was durchaus passieren kann wenn eben kein Bild gefunden wird, dann stürzt das Script hier ab, weil $return eben garkein Array ist. In der UDF fehlt also eine vorangestellte Prüfung ob die DLL existiert oder alternativ müsste man nach dem DLLcall auf @error prüfen bevor man mit dem Ergebnis Array arbeitet.


    Möglicherweise gibt es aber längst eine aktuellere Fassung der UDF, bin nur dem ersten Google Treffer gefolgt. Wie dem auch sei es ist davon auszugehen, dass du schlichtweg vergessen hast die DLL Datei mitzuliefern.

    Davon mal ab... wozu zum Henker braucht man die Funktion _imagesearch überhaupt? Ich sehe keinen sinnvollen Einsatzzweck dafür.

    Einmal editiert, zuletzt von misterspeed (2. März 2013 um 21:31)