• Hallo Comunity,

    Ich habe mal versucht, eine Dll in C# zu erstellen, Nur leider klappt der DllCall per AutoIt nicht.
    (Bitte nicht schlagen wenn es was einfaches ist, Fange heute erst mit C# an) ;)

    Das ist mein C#-Code:

    C#-Code :)

    Und das mein TestCode in AutoIt:

    [autoit]


    $hDll = DllOpen(@ScriptDir & "\TestDLL.dll")
    ConsoleWrite(DllCall($hDll, "long", "MultiP", "long", 5, "long", 6) & @CRLF)
    DllCLose($hDll)

    [/autoit]

    Schonmal Danke im vorraus!

  • C# wird kompiliert, dass es noch .NET braucht, das wird in einer DLL aber nicht möglich.
    Du kanst es mit public static Funktionen und normalen Rückgabevariablen und Parametern mit einem Programm konvertieren. Der Konverter wurde in Skripte in diesem Forum reingestellt.
    DotNETExporter

    2 Mal editiert, zuletzt von TheShadowAE (13. Mai 2010 um 15:25)

  • Einfach das Programm downloaden und benutzen
    Ach übrigens, es klappt nur wenn du Code optimeiren machst, ist mir aufgefallen :D

  • Damit du dich nicht aufregst, ich hab das Copyright geändert und ja das Tool ist von mir.
    Das Microsoft Copyright ist nur das Standard Copyright, wenn ein neues Projekt mit Visual Studio erstellt wird.

    Es funktioniert auch mit nicht optimiertem Code, da es keine Auswirkung auf den Export hat.

  • Bei mir klappt es nur wenn ich in deinem Tool, das Code optimieren aktiviere.
    Und wenn das stimmt mit dem Copyright, dann sry
    Kommt nurmal komisch vor wenn erst Microsoft drinsteht und dann dein Name :P

  • Hm das hatte ich auch als ich das zu ersten Mal versucht habe, ich glaube das lag an einem Parameter.
    Wie ist denn dein Aufruf und deine Deklaration von deiner Funktion?

    EDIT: PS: Ein Beispiel bringt vermutlich nichts, weil du es ja erst konvertieren musst und alle sowas

  • Mal probiert ohne Consolewrite mit einem Array zu benutzen?

    [autoit]


    $ret=DllCall($hDll, "long", "MultiP", "long", 5, "long", 6)
    ConsoleWrite($ret[0]&@crlf)

    [/autoit]

    EDIT: Und hast du die DLL mit optimeiren konvertiert und Funktionen ausgewählt und x64/x86?

    2 Mal editiert, zuletzt von TheShadowAE (13. Mai 2010 um 17:41)

  • Hier der C# Code:

    Spoiler anzeigen


    und der aufruf mit Autoit

    Spoiler anzeigen
    [autoit]

    $dll = DllOpen("autoit3csharpdllx86.dll")
    ;$dll = DllOpen("autoit3csharpdllx64.dll")

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

    $result = DllCall($dll, "int", "AddInteger", "int", 3, "int", 5)
    MsgBox(0, "AddInteger 3 + 5", $result[0])

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

    $result = DllCall($dll, "int", "MultiplyInteger", "int", 3, "int", 5)
    MsgBox(0, "MultiplyInteger 3 * 5", $result[0])

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

    $result = DllCall($dll, "str", "StringTest", "str", "Test")
    MsgBox(0, "StringTest ,Test,", $result[0])

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

    DllClose($dll)

    [/autoit]


    Funktioniert wie erwartet mit und ohne optimieren