In dieser Reihe werde ich euch ganz genau erklären wie ihr mit Dll´s umzugehen habt und ihr sie am besten nutzt um maximale Erfolge zu erlangen.
Im Teil 1 werden wir folgendes behandeln
- Was ist eine Dll
- Grundlagen bei Dll´s in AutoIt
- Schreiben der Dll
- Benutzen der DLL
Ok, legen wir los.
Was ist eine DLL?
Dll bedeutet ausgeschrieben "Dynamic Link Libray", oder auch Dynamische Link Bibliothek. Darunter versteht man folgens, das eine DLL eine Ansammlung von Funktionen hat, die Dynamisch aufgerufen werden kann. DLL gibt es allerdings nur unter Windows, andere Betriebssysteme benutzen ähnliche Varianten.
Zitat aus Wikipedia:
Das heißt, wenn die DLL einmal im Speicher ist, dann sie von jedem Programm benutzt werden.Quote:
Der Zweck von DLL-Dateien ist, den von einer Anwendung auf der Festplatte und im Hauptspeicher benötigten Speicherplatz zu reduzieren. Jeglicher Programmcode, der von mehr als einer Anwendung benötigt werden könnte, wird deshalb in einer einzelnen Datei auf der Festplatte gespeichert und nur einmal in den Hauptspeicher geladen, wenn mehrere Programme dieselbe Programmbibliothek benötigen.
Pro und Contra
Pro
- Dll´s können in Form von PlugIn´s dienen
- verbrauchen wenig Speicher, weil sie nur einmal geladen werden müssen
Contra
- Kommt zu Problemen, wenn mehrere Anwednungen verschiedene Versionen benötigen
- Bei NET Anwendungen kommt es auch manchmal zu Konflikten
Grundlagen von DLL´s in AutoIt
- Als Aufruf Konvention beutzt AutoIt die Win API Methode "stdcall"
- Man sollte immer voher "DllOpen nutzen", wenn man eine DLL öffnet.
Bei einem einfachen Einsatzt,wie er hier Erläutert wird, gibt es noch nix besonderes zu beachten. Später wird sich das allerdings ändern, was aber noch genauer Erklärt wird.
Schreiben der DLL
Damit dies auch eine Tutorial wird, wollen wir natürlich auch eine DLL einsetzen. Der größte Nachteil ist sicher der, das man in AutoIt keine eigenen Dll´s schreiben kann, sondern sich entweder selber eine erstellen oder auf fremde Quellen zurück greifen. Für alle die, die in der Lage sind eine zu schreiben, sollen jetzt eine schreiben. Ich benutze Delphi dafür. Aber ihr könnt natürlich auch C++, VB usw. nutzen. Wichtig ist nur das ihr die Aufruf Konvention "stdcall" benutzt.
Also, für alle die es auch in Delphi machen.
- Öffnet ein neues DLL Projekt
- Fügt in die uses Klausel "Windows" ein
- gebt nun folgenden Code ein
Code:
library Rechnung; uses SysUtils, Windows, Classes; {$R *.res} Function Rechnen (Zahl1, Zahl2: Double): Double; stdcall; begin result := Sqrt((Zahl1*Zahl2)); end; exports Rechnen index 1; begin end.
Als Parameter erwartet sie zwei Zahlen vom Typ double.
Speichert jetzt die DLL in einem beliebigen Ordner. In diesen Ordner erstellen wir später auch noch unsere AutoIt Datei.
Benutzen der DLL
Öffnet nu als erstes AutoIt.
Jetzt machen wir erstmal ein paar vorüberlegungen.
Was wollen wir uns was brauchen wir.
Wir brauchen
- 2 Zahlen vom Typ double
- den DLL Namen und den Speicherpfad
- Den Return Typ
Was wollen wir?
- Die Wurzel aus dem Produkt der beiden Zahlen
OK, uns ist alles bekannt. Der Pfad, die Parameter usw.
Legen wir los
Als erstes Öffnen wir die DLL. Das erledigen wir mit "DLLOpen". Diesen Wert speichern wir in einer Variable.
PHP Code:
$Open = DllOpen("Rechnung.dll")
Dafür steht uns die Funktion "DllCall" zur Verfügung. Der Syntax sieht dafür wie folgt aus.
Code:
DllCall ( "dll", "return type", "function" [, "type1" [, param1 [, "type n" [, param n]]]] )
Den return Wert speichern wir wieder in einer Variable.
PHP Code:
$return = DllCall ($Open, "double", "Rechnen", "double", 20, "double")
Erinnern wir uns an unsere Dll.
Rechnen (Zahl1, Zahl2: Double): Double;
->
Unsere erwarteten Zahlen (im beispiel hier der Wert 20)
Der Typ, den die Zahlen haben müssen (hier double)
Der RückgabeWert (auch double)
nochmal in AutoIt.
DllCall ($Open, "double", "rechnen", "double", 20, "double", 20)
So, nun wollen wir ja aber das Ergebnis wissen.
Wichtig
AutoIt speichert den Rückgabewert in einem Array. Standart ist es der 0
Aufrufen geht wie gewohnt.
PHP Code:
MsgBox (64, "Ergebnis", "Das Ergebnis lautet " & return[0])
PHP Code:
$Open = DllOpen("Rechnung.dll")
$return = DllCall ($Open, "double", "Rechnen", "double",20, "double", 20)
MsgBox (64, "Ergebnis", "Das Ergebnis lautet " & $return[0])
Eigene Werte
Eigene Werte einzutragen ist ganz einfach. Erstellt dafür eine GUI oder nehmt die Vorlage von meiner.
PHP Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Wurzelrechnung", 154, 182, 192, 124)
$Label1 = GUICtrlCreateLabel("Deine Erste Zahl:", 16, 24, 106, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("Deine Erste Zahl:", 16, 88, 106, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Input1 = GUICtrlCreateInput("", 16, 48, 121, 21)
$Input2 = GUICtrlCreateInput("", 16, 112, 121, 21)
$Button1 = GUICtrlCreateButton("Rechnen", 16, 144, 123, 25, $WS_GROUP)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_Rechnen()
EndSwitch
WEnd
So, und jetzt einfach arbeiten wie man es mit GUI´s gewohnt ist.
Wenn man auf den Button klickt, wird die Funktion rechnen aufgerufen.
PHP Code:
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_Rechnen()
EndSwitch
WEnd
PHP Code:
Func _Rechnen()
GLobal $Zahlx = GUICtrlRead($Input1)
Global $Zahly = GuiCtrlRead($Input2)
$Open = DllOpen("Rechnung.dll")
$return = DllCall ($Open, "double", "Rechnen", "double", $Zahlx, "double", $Zahly)
MsgBox (64, "Ergebnis", "Das Ergebnis lautet " & $return[0])
EndFunc
Entfernt die "20" und schreibt $Zahlx und $Zahly rein. Nun könnt ihr eure eigenen Werte eintragen berechnen lassen.
So, das war der erste Teil meines Tutorials. Der zweite Teil folgt bald.
Wenn es euch gefalle hat, drückt doch bitten den Button. Danke!