in C++ erstellte .dll´s in AutoIt nutzen

  • Hallo @ all!
    Ich hätte mal eine kleine Frage:
    Kann man in Visual c++ erstellte .dll´s in AutoIt mit DllCall nutzen?
    Hab diverse Funktionen (nur zum testen) in Visual c++ express edition zu ner .dll kompiliert.
    Es kam keine Fehlermeldung und ich hatte eine fertige .dll.
    Aber wenn ich die Funktionen nun in AutoIt per DllCall aufrufe klappt das nicht...
    Ist das überhaupt möglich? Wenn ja, muss ich iwas besonderes beachten?
    Danke für eure Hilfe!

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • Aso ^^

    Also zuerst hab ich mit C++ eine Dll erstellt

    Spoiler anzeigen

    Und danach kann man diese Dll so aufrufen:

    [autoit]

    $dll = DllOpen("add.dll")
    $c = DllCall($dll,"double:cdecl","AddNumbers","double",$a,"double",$b)

    [/autoit]
  • da komt bei mir ne leere Msgbox...
    wenn ich beim returntype nur double hinschreibe hängt sich AutoIt auf -.-*
    So sieht die .dll-Vorlage bei devc++ aus:
    wo und wie soll ich hier nun die Funktionen einfügen?
    Bei google finde ich komplett andere vorlagen...

    Spoiler anzeigen

    /* Replace "dll.h" with the name of your header */
    #include "dll.h"
    #include <windows.h>

    DllClass::DllClass()
    {

    }


    DllClass::~DllClass ()
    {

    }


    BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
    DWORD reason /* Reason this function is being called. */ ,
    LPVOID reserved /* Not used. */ )
    {
    switch (reason)
    {
    case DLL_PROCESS_ATTACH:
    break;

    case DLL_PROCESS_DETACH:
    break;

    case DLL_THREAD_ATTACH:
    break;

    case DLL_THREAD_DETACH:
    break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
    }

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • Du kannst die DLLs in C++ erstellen, aber die Funktionen, die du in AutoIt aufrufen willst, müssen in guter alter C-Syntax geschrieben werden. deshalb extern "C" ;)