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!
in C++ erstellte .dll´s in AutoIt nutzen
-
- [ offen ]
-
GE IXI TIM -
28. März 2010 um 22:31 -
Geschlossen -
Erledigt
-
-
Schau mal: [ offen ] Dlls
-
Was hast du alles gemacht? Es gibt nämich mehrere Arten DLLs zu erstellen und aufzurufen.
-
Aso
Also zuerst hab ich mit C++ eine Dll erstellt
Spoiler anzeigen
C
Alles anzeigen#if defined(_MSC_VER) #include <windows.h> #define DLL extern "C" __declspec(dllexport) #else #define DLL #endif // nur unter MS VC das Symbol DLL definieren; z.B. unter Linux wird DLL ignoriert // Die Funktion, die anderen Programmen zur Verfügung gestellt werden soll // (in diesem Beispiel: Addieren zweier Zahlen) DLL double AddNumbers (double a, double b) { return a + b; }
Und danach kann man diese Dll so aufrufen:
[autoit]$dll = DllOpen("add.dll")
[/autoit]
$c = DllCall($dll,"double:cdecl","AddNumbers","double",$a,"double",$b) -
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;
} -
Hier hat bernd einen c++ Code entsprechend angepasst: C++ DLL
Vielleicht hilft dir das bei deinem Bsp. -
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"