Herzlich Willkommen zum "DLL's ins C für AutoIt!" Tutorial
Wie man eventuell schon im Titel ablesen kann, geht es in diesem Tutorial um DLL und AutoIt.
Ich weiß das dass Thema schon mehrere male durchgekaut wurde, aber Ich hab mal vor das alles an einer Zentralen Stelle zu listen.
Als erstes sei gesagt, eine DLL zu erstellen ist nicht wirklich schwer, Es kommt nur auf die Herangehensweise an.
Für das Tutorial werden folgende Tools / Programme vorrausgesetzt:
- TCC (Tiny C Compiler, als Alternative zu Visual Studio C++) [281 KB]
- Eine IDE bzw ein Programm was für C geeignet ist (in meinem Fall Sublime Text 2 oder halt Notepad++)
Und schon kann es losgehen:
- Wechselt in das Verzeichnis wo ihr TCC heruntergeladen habt.
- Entpackt das ZIP-Paket.
- Wechselt ins entpackte Verzeichnis (und in den Ordner tcc\)
- Erstellt (der Übersicht halber) einen neuen Ordner (meinetwegen DLLTUT\)
- Geht in diesen Ordner und erstellt mir eurem Editor eine Datei mit dem Typ *.c (zb. Dll.c)
- Öffnet die Datei mit eurem Editor
Jetzt gehts ans Eingemachte:
Ich schreibe euch der Vollständigkeit erstmal den vollen Quellcode hin und erkläre dann bestimme Parts von ihm direkt danach)
#include <windows.h>
#define AUTOIT_CC __declspec(dllexport)
AUTOIT_CC int Add(int Num1, int Num2)
{
return (Num1 + Num2);
}
Also, fangen wir mal an:
Bindet die notwendigen Header als Include in unser Script ein.
Header beschreiben in C/C++ meistens, wie Funktionen definiert sind (von den Typen her, etc).
Definiert die Konstante AUTOIT_CC mit der genutzten Aufrufkonvention.
Der Name der Konstante kann frei wählbar sein (in dem Fall bedeutet es einfach AutoIt Calling Convetion).
Erstellt eine Funktion (die via der ermittelten Aufruf Konvention) aufgerufen wird
In dem Fall rechnet die Funktion die 2 übergebenen Zahlen (vom Typ int) zusammen und gibt sie zurück (als Zahl vom Typ int).
Sollte sich selbst erklären.
Kompilieren der Dll
Nun kommen wir zum richtig interessantem Teil, das Kompilieren der Dll
Der Befehl kompiliert die DLL (da Parameter -shared) in unser Verzeichnis als Dll.dll
Das wars schon, die DLL ist fertig
Aufruf durch AutoIt
[autoit]
#AutoIt3Wrapper_UseX64=n
$iNumber1 = 17
$iNumber2 = 34
$aReturn = DllCall(@ScriptDir & "\Dll.dll", "int:cdecl", "Add", "int", $iNumber1, "int", $iNumber2)
If @error Then Exit MsgBox(16, "Fehler", "DllCall Fehler: " & @error)
MsgBox(64, "Ergebnis", $aReturn[0])
[/autoit]Das wars.
Wir sind komplett Fertig.
Nun habt ihr eine Grundlage für eure DLL's.
PS: Ich sehs schon kommen, der Ansturm von den ganzen DLL's