DLLCall

  • Also ich hab grad probiert meine eigene dll datei mit dllcall zu verwenden...
    Allerdings klappt das nicht :(
    Wo liegtn da der Fehler:

    Dll Code (in VB.NET 2008)

    Autoit Code:

    [autoit]


    $return = DllCall("test1", "int", "ADD", "int", 5, "int", 5)
    If $return[0] = 0 Then MsgBox("","","")

    [/autoit]

    die dll heißt compiled test1.dll und liegt im selben verzeichniss wie die autoit source...

    error der kommt:

    C:\Dokumente und Einstellungen\Icynator\Eigene Dateien\Visual Studio 2008\Projects\test1\test1\bin\Release\Neu AutoIt v3 Script.au3 (2) : ==> Subscript used with non-Array variable.:
    If $return[0] = 0 Then MsgBox("","","")
    If $return^ ERROR


    mfg
    Icynator

    Lösung:

    vb.net source:

    Mit dem dotNET DLL-Exporter umwandeln zu ner kompatiblen dll

    und verwenden ;)

    2 Mal editiert, zuletzt von Icynator (6. April 2010 um 23:46)

  • Heisst deine dll test1 oder test1.dll? Der vollständige Dateinamename sollte so auch in den dllcall().
    Je nach Compiler ggf auch cdecl beachten, damit die Parameter richtig übergeben (zurückgegeben) werden.

    Edit: nach dem dll-call zuerst auf @error testen....

    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

    Einmal editiert, zuletzt von Andy (6. April 2010 um 18:57)

  • test1.dll...

    hab auf @error getestet... dann kommt raus das er die funktion nicht findet... also liegts wahrscheinlich echt daran das er keine .net dll verwenden kann...

    EDIT:\\ Wenn ich die dll mitn dotNET DLL-Exporter umwandel kommt immer autoit hat ein problem festgestellt und muss.................

  • Die derzeitige Version des dotNET DLL-Exporter exportiert den Code als x86 Dll, also musst du das Skript auch als x86 Ausführen

  • Du musst die Funktionen auch als "Public Shared Function ADD(ByVal first As Integer, ByVal sec As Integer)" definieren

  • Hab den Fehler gefunden. Du musst den Rückgabetyp angeben dann funktioniert alles
    "Public Shared Function ADD(ByVal first As Integer, ByVal sec As Integer) As Integer"

    Edit: Der Fehler ist das der Rückgabetyp auf object gesetzt wird, wenn kein Rückgabetyp angegeben wurde und ist deshalb mit .NET fernen Sprachen inkompatibel

    Einmal editiert, zuletzt von RAPTOR-ONE (6. April 2010 um 23:35)