C# DLL in Autoit einbinden ....

  • Hallo,

    ich versuche gerade eine DLL für Autoit mittels c# zu erstllen. Habe auch in dem alten Thread ([ gelöst ] C#-DLL in AutoIt einbinden) gelesen, dass das geht.

    Jetzt meine Frage, geht das jetzt mittlerweile einfacher als die DLL, wenn man das da genannte Tool nicht verwendet, in Autoit zur verwendung zu bringen?

    Ich habe es, wie in dem Thread genannt versucht. Habe eine .Il Datei erstellt und die da genannten Änderungen vorgenommen. Dann kam jedesmal die Fehlermeldung, dass es sich bei meiner il-Datei nicht um eine PE handle.

    Kenne mich mit dem ilasam leider nicht wirklich aus. meine eingabe (Visual Studio 2012) war->ilasam.exe testlib.dll /out=mylib.il

    Mach ich da schon was verkehrt? .. .geht das überhaupt mit NET 4.5?

    In Anhang ist die Dll, welche nicht mehr macht als einen String zurück zu geben.

    Danke für eure Hilfe
    BinäryChief

  • So... was ich nun weiter versucht habe .... man muss ja nicht jedes mal das Rad neu erfinden. Es gibt da eine Erweiterung für VS, ein Nuget Paket.

    Zu finden ist das hier: Unmanaged Exports:
    https://sites.google.com/site/robertgie…nmanagedexports

    [Blockierte Grafik: http://i.imgur.com/FgxlGi3.png]

    Damit kann man ja recht einfach unmanaged Exports erstellen, mittlerweile auch mit F#,VB.Net .. so zumindest die Theorie.

    Hier muss man dann nur noch die Funktion im Sourcecode mit [DllExport] ausweisen und dann noch die Platform auf !! x64 oder x86 !! festlegen. Das hab ich soweit gemacht. Ich bekomme auch eine Dll die ich lesen kann. Kann sie verwenden und ich finde auch die Funktion. Aber ich bekomme keinen Wert. Egal ob ich da jetzt int zurück liefere oder string.

    Das wäre die Klasse mit makierter Funktion die Exportiert werden soll.

    Spoiler anzeigen

    Dann habe ich versucht diese aufzurufen.

    [autoit]

    $dll=DllOpen ("Testlib.dll")
    $result=DllCall("Testlib.dll","int",0)
    MsgBox(0,"",$dll)
    ConsoleWrite(@error)
    ;ConsoleWrite($result)
    MsgBox(0,"",$result)

    [/autoit]

    $dll liefert hier keinen Fehler.... kann sie öffnen und Error ist uach 0 also sollte auch gehen. Stehe da gerade auf dem Schlauch ...da die Messagebox mit $result leer bleibt.

    Sollte das funktionieren? Oder habe ich da irgendwie was grundsätzlich falsch verstanden?

    Update:

    Es funktioniert wunderbar. Habe hier nur wohl offenbar einen Fehler im Aufruf in Autoit gemacht und die result Variable falsch abgefragt. Hätte nicht gedacht, dass es doch so einfach geht. Bin wirklich begeistert. ^^

    [Blockierte Grafik: http://i.imgur.com/QzaXPGj.png]

    10 Mal editiert, zuletzt von BinäryChief (23. September 2013 um 12:28)

  • Hi,
    wenn du jetzt noch schreibst, dass die Lösung deines Problems darin lag, dass DllCall() ein Array zurückgibt, kannst du den Thread auf gelöst setzen :thumbup: