C#-DLL in AutoIt einbinden

  • Hi,
    6...setzen....

    Zitat

    Ausgabe: 0.

    schau dir mal an, was ein DllCall() zurückgibt... ;(
    Das allereinfachste Debuggingwerkzeug in Autoit besteht aus der Tastenkombination ALT+d
    Wenn man sich angewöht, damit die Variablen zu checken, fallen 90% aller Fehler auf!

    Weiterhin finde ich weder mit IDA noch mit Raptor´s Werkzeug in einer deiner Dll´s die Funktion....

    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 (23. November 2012 um 23:38)

  • Hi,
    6...setzen....

    schau dir mal an, was ein DllCall() zurückgibt... ;(
    Das allereinfachste Debuggingwerkzeug in Autoit besteht aus der Tastenkombination ALT+d
    Wenn man sich angewöht, damit die Variablen zu checken, fallen 90% aller Fehler auf!

    Weiterhin finde ich weder mit IDA noch mit Raptor´s Werkzeug in einer deiner Dll´s die Funktion....

    Könnte es daran liegen, dass ich nur Visual C# Express,
    und kein Visual Studio installiert habe?
    Würde die Testversion von VS ausreichen?

  • Doch, die Express-Versionen reichen aus.
    Könnte es sein, dass du ein 64 Bit-System verwendest?
    Bei meinem XP32 funktioniert alles einwandfrei, auf dem Win7-64 habe ich das Studio nicht installiert.

  • Doch, die Express-Versionen reichen aus.
    Könnte es sein, dass du ein 64 Bit-System verwendest?
    Bei meinem XP32 funktioniert alles einwandfrei, auf dem Win7-64 habe ich das Studio nicht installiert.

    Jap, habe ein 64 Bit Betriebssystem.

  • Hi,
    nach ein bischen googeln ist herausgekommen, dass es wohl egal ist, ob die dotnet-Dll mit einem 32- oder 64Bitsystem erstellt wurde, es wird lediglich ein Flag im Header gesetzt.
    Erst das Runtimesysten (der Compiler) erstellt dann die entsprechende Version.
    Wenn du also den Compiler anweist, eine 32-Bit-DLL zu erstellen, könnte das helfen.

    Wenn der 64-Bit-Modus aus programmtechnischen Erfordernissen nicht explizit nötig ist, sollte man aus abwärtskompatiblen Gründen 32-Bit-Programme bzw. dll´s erstellen.

  • Hi, habe mir kurz deinen Code angesehen und das Problem ist ganz einfach! Die Funktion ist nicht static und deshalb kann es auch nicht funktionieren und wird im Tool auch nicht angezeigt
    DotNETExporter

  • 'Hätte da noch eine kleine Frage (tut mir leid...)
    Undzwar: Ich habe nun erfolgreich einige DLL's in C# für AutoIt erstellt,
    und habe mich nun wieder meinem kleinen Projekt zugewendet, wofür
    ich eine selbst erstellte DLL dringenst bräuchte.

    Nun, ich dachte mir, dass es eigentlich funktionieren sollte,
    aber das tut es (leider) nicht...

    Ich versuche vergebens,
    diesen Code (C#) als DLL kompiliert
    und umgewandelt
    in AutoIt per DllCall aufzurufen, bekomme
    aber immer einen Fehler von seitens AutoIt.

    Nehmen wir an, ich habe diesen C# code:

    Spoiler anzeigen

    - Ich müsste ihn nun so in AutoIt aufrufen:

    Spoiler anzeigen
    [autoit]

    $Dllopen = Dllopen(@Scriptdir & "\Main.dll")
    $DllCall = DllCall($Dllopen,"str","SendPacket","str", "www.mmmmail.com/njahs.xml","str","")
    $DllCall = DllCall($Dllopen,"str","isReceived","str", $DllCall[0],"str",'njahs')

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

    msgbox(0,"","Error Code: " & @error & " Array: " & IsArray($DllCall))
    _Arraydisplay($DllCall)

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

    DllClose($DllOpen)

    [/autoit]

    Dabei kommt aber diese Fehlercode heraus:

    Spoiler anzeigen

    Ich 'bin hier am verzweifeln.
    Habe, bis zum bitteren Ende, Suchmaschinen benutzt,
    vergebens..

    Liegt es an meinem .Net Framework (aktuellste Version) oder sogar an meinem AutoIt? ;(

    Projekt & Main.dll im Anhang.

  • Ist wieder ganz einfach^^
    Im Tool nutze ich derzeit den .NET 3.5 Compiler
    Dein Projekt nutzt aber .NET 4.0. Du musst entweder das Projekt in VS auf 3.5 setzen oder die Dll von Hand anpassen und mit dem 4.0 Compiler kompilieren.

    PS: Es wird keine COM DLL erstellt. Die Dll die erstellt wird ist äußerlich eine native Dll wie in C oder C++