ImageSearch spuckt Fehler aus.

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    ImageSearch spuckt Fehler aus.

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Imports AutoItX3Lib
    3. Public Class Form1
    4. Dim a As New AutoItX3Lib.AutoItX3
    5. Dim AutoIt As New AutoItX3Lib.AutoItX3
    6. Dim Toleranz As Integer = 0
    7. Dim Fenstername As String = "WDExpress.exe"
    8. Dim Bild As String
    9. Dim Bild2 = Bild
    10. Public Function ImageSearch(ByVal x1 As Integer, ByVal y1 As Integer, ByVal right As Integer, ByVal bottom As Integer, ByVal findImage As String) As String
    11. End Function
    12. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    13. End Sub
    14. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    15. Dim AutoIt As New AutoItX3Lib.AutoItX3
    16. Dim p As Point = ImageSearch("E:\Users\Saimo\Desktop\vstudio.png", True)
    17. AutoIt.MouseClick("Left", p.X, p.Y, 2)
    18. End Sub
    19. Function ImageSearch(ByVal Bild As String, Optional ByVal Mitte As Boolean = True) As Point
    20. If Not IO.File.Exists(Bild) Then
    21. MessageBox.Show("Die Datei " & Bild2 & "konnte nicht gefunden werden. Das Programm wird beendet.")
    22. End
    23. End If
    24. If Toleranz > 0 Then Bild = "*" & Toleranz & " " & Bild
    25. Dim x As String = ImageSearch(a.WinGetCaretPosX(), a.WinGetCaretPosY(), a.WinGetCaretPosX() + a.WinGetClientSizeWidth(Fenstername), a.WinGetCaretPosY() + a.WinGetClientSizeHeight(Fenstername), Bild)
    26. If x = "0" Then
    27. MessageBox.Show("Das Bild " & Bild2 & " konnte nicht auf dem Bildschirm gefunden werden. Das Programm wird beendet.")
    28. End
    29. Else
    30. Dim y = x.Split("|")
    31. If Mitte = True Then
    32. Return Point.Subtract(New Point(y(1), y(2)), New Size(y(3) \ -2, y(4) \ -2))
    33. Else
    34. Return New Point(y(1), y(2))
    35. End If
    36. End If
    37. End Function
    38. End Class


    Ich bekomme diesen Fehler:


    Ich verstehe nicht was das bedeuten soll.
    Habe es auch mit verschiedenen Bildern versucht.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Saimo“ ()

    Stell bitte deinen Code als VB-Code ein, dafür musst du auf VB.NET-Tags klicken (rechts).

    x ist dein Rückgabewert von ImageSearch, der ist Nothing, vom Nothing kannst du kein Split machen, deswegen der Fehler. Du musst vorher prüfen, ob der String leer ist (und nicht mit "0" vergleichen, sondern mit "").
    Wow danke habe jetzt keine Fehler aber es zeigt an das das Bild nicht gefunden werden konnte.
    Ich benutze dieses Bild:


    Habe es als png abgespeichert sollte das etwas anderes sein?
    Wie ist es wen ich die Toleranz hochstelle wie z.b. auf 2 oder 3?
    Wie soll sie denn etwas anderes rausgeben, wenn sie NICHTS macht?

    Saimo schrieb:

    P

    VB.NET-Quellcode

    1. Public Function ImageSearch(ByVal x1 As Integer, ByVal y1 As Integer, ByVal right As Integer, ByVal bottom As Integer, ByVal findImage As String) As String
    2. End Function


    Hier rufst du sie auf, natürlich kommt da ein Nothing zurück:

    Saimo schrieb:

    VB.NET-Quellcode

    1. Dim x As String = ImageSearch(a.WinGetCaretPosX(), a.WinGetCaretPosY(), a.WinGetCaretPosX() + a.WinGetClientSizeWidth(Fenstername), a.WinGetCaretPosY() + a.WinGetClientSizeHeight(Fenstername), Bild)

    Ich habe den ersten Code jetzt verändert weil ich sah das ich einfach vb den Fehler ausbessern habe lassen Wenn ich den neuen jetzt nutzte passiert es aber das bei mir ImageSearch als Fehler angezeigt wird. Und zwar steht dort System.Runtime.InteropServices.DllImportAttribute kann nicht auf eine Instanzenmethode angewendet werden.

    VB.NET-Quellcode

    1. <DllImport("ImageSearchDLL.dll")> Public Function ImageSearch(ByVal x1 As Integer, ByVal y1 As Integer, ByVal right As Integer, ByVal bottom As Integer, ByVal findImage As String) As StringEnd Function


    Die Dll befindet sich im Ordner wo auch das Programm ist.
    Hau' das Shared-Schlüsselwort rein und du kannst die API-Funktion ohne Probleme aufrufen. Einfach wieder das Attribut reinklatschen. ;)

    sonne75 schrieb:

    Wenn DLL sich im Ordner befindet, dann füge sie unter Verweise hinzu (im Projekt) und dann kannst du die Funktion einfach aufrufen (nach Imports)


    Geht leider nicht da kommt der Fehler:

    Es konnte der Verweis auf (Pfad zu ImageSearchDLL.dll) hinzugefügt werden.
    Stellen Sie sicher, dass auf die Datei zugegriffen werden kann und dass sie eine gültige Assembly oder COM- Komponente ist.

    Higlav schrieb:

    Hau' das Shared-Schlüsselwort rein und du kannst die API-Funktion ohne Probleme aufrufen. Einfach wieder das Attribut reinklatschen. ;)


    Wo soll ich das einfügen?

    sonne75 schrieb:

    Wo es in deinem anderen Thread war. "Public Shared Function" bei DLL.

    Jetzt kommt Bezeichner erwartet bei <DllImport...
    Und das hier:
    Fehler 2 Zu viele Argumente für "Public Function ImageSearch(Bild As String, [Mitte As Boolean = True]) As System.Drawing.Point". E:\Users\Saimo\documents\visual studio 2012\Projects\Test\Test\Form1.vb 28 81 Test

    Saimo schrieb:

    wurde mit Code 1073741855 (0x4000001f) beendet
    Vielleicht kannst Du die Zeile im Code ermitteln, bei der dieser Fehler auftritt.
    Wahrscheinlich ein DLL-Ruf, sieh Dir an dieser Stelle genau die Werte der Parameter an, die Du in die DLL übergibst.
    Und: Hast Du Option Strict On?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!