Probleme mit Dll-Datei

  • Hallo,

    ich habe mich auf das Neuland "Dll-Datei" gewagt und versucht, eine eigene in C++ geschriebene Dll-Datei mit AutoIt zu benutzen.
    Leider erhalte ich beim Ausführen des Autoit-Skriptes folgende Meldung:

    "AutoIt v3: AutoIt3.exe - Ungültiges Bild"
    "[...]Dll.dll ist entweder nicht für die Ausführung unter Windows vorgesehen oder enthält einen Fehler. Installieren Sie das Programm mit den Originalinstallationsmedien erneut, oder wenden Sie sich an den Systemadministrator oder Softwarelieferanten, um Unterstützung zu erhalten."

    Das AutoIt-Skript:

    [autoit]


    $hDll = DllOpen(@ScriptDir & "\Dll.dll")
    $ret = DllCall($hDll, "int", "Summe", "int", 5, "int", 4)
    MsgBox(0, $ret, @error)

    [/autoit]


    Die main.cpp:

    Code
    #include "main.h"
    
    
    namespace TEST
    {
      int op::Summe(int a, int b)
      {
         return a+b;
      }
    }

    Die main.h:

    Ich bin mir sicher, dass ich wohl etwas Elementares falsch gemacht habe - nur was? Wie gesagt, dass ist für mich absolutes Neuland und mit C++ hatte ich bisher nicht so viel zu tun. Ich vermute, dass es einfach ein Anfänger-/Denkfehler ist, der hier aus Unwissenheit begangen wurde. Ich hoffe, dass ihr mir in dieser Angelegenheit helfen könnt! Die "fertige" (?) Dll-Datei habe ich angehängt.

    Viele Grüße und Dank im Vorraus
    stay

  • [autoit]


    $dll = "autoit.dll"
    $a = 5.0
    $b = 10.0

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

    $add = DllCall($dll, "double:cdecl", "_add", "double", $a, "double", $b)
    MsgBox(0, "DLL-Tut", "Das Ergebnis ist: " & $add[0] & @TAB)
    Exit

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

    #cs
    // main.cpp erstellt mit CodeBlocks 10.05

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

    // Das Problem lag bei $add[0]

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

    extern "C" double __declspec(dllexport) _add (double a, double b)
    {
    return a + b;
    }

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

    #ce

    [/autoit]
  • Dann noch ein Beispiel mit Code::Blocks für x86.
    Code::Blocks liefert da direkt ein Beispielprojekt, in welchem man nur wenige Zeilen abändern muss und fertig ist eine voll funktionsfähige DLL.
    Die au3 Datei zum Testen befindet sich im "bin" Ordner.

    Dateien

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • Hallo,

    vielen Dank für eure zahlreichen Antworten!
    Ich kann mir das leider erst nachher genauer anschauen.
    Ich habe X86.


    Danke!
    Gruß stay


    Edit: Super, hab es jetzt zum Laufen gebracht. Danke für eure Antworten und Beispiele!

    Einmal editiert, zuletzt von stayawayknight (5. Oktober 2012 um 22:32)