Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 06:59

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[AutoIt] Dll in AutoIt - Teil 1

Discussion on [AutoIt] Dll in AutoIt - Teil 1 within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1
 
HardCore.1337's Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
Thumbs up [Tutorial] Dll in AutoIt - Teil 1

Herzlich Wilkommen zu Teil1 meines Dll Tutorial.
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:

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.
Das heißt, wenn die DLL einmal im Speicher ist, dann sie von jedem Programm benutzt werden.



Pro und Contra

Pro
  1. Dll´s können in Form von PlugIn´s dienen
  2. verbrauchen wenig Speicher, weil sie nur einmal geladen werden müssen

Contra
  1. Kommt zu Problemen, wenn mehrere Anwednungen verschiedene Versionen benötigen
  2. 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.
Was macht die DLL jetzt? Sie errechnet aus dem Produkt zweier Zahlen die Wurzel.
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"
Jetzt geht es darum, die Funktion zu callen.
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]]]] )
Und das setzen wir jetzt ein.
Den return Wert speichern wir wieder in einer Variable.

PHP Code:
$return DllCall ($Open"double""Rechnen""double"20"double"
So, für Zahl1 und Zahl2 haben wir nun Probeweise 20 eingesetzt.

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]) 
Demnach sieht unser Code nun wie folgt aus und sollte auch funktionieren.

PHP Code:
$Open DllOpen("Rechnung.dll")
$return DllCall ($Open"double""Rechnen""double",20"double"20)
    
MsgBox (64"Ergebnis""Das Ergebnis lautet " $return[0]) 
Wenn ihr es nun mit F5 startet sollte eine MsgBox mit dem Wert "20" rauskommen.


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"154182192124)
$Label1 GUICtrlCreateLabel("Deine Erste Zahl:"162410620)
GUICtrlSetFont(-1104000"MS Sans Serif")
$Label2 GUICtrlCreateLabel("Deine Erste Zahl:"168810620)
GUICtrlSetFont(-1104000"MS Sans Serif")
$Input1 GUICtrlCreateInput(""164812121)
$Input2 GUICtrlCreateInput(""1611212121)
$Button1 GUICtrlCreateButton("Rechnen"1614412325$WS_GROUP)
GUICtrlSetFont(-1104000"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, sieht die etwa aus:



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 
In die Funktion kommen noch alles rein was wir bis jetzt geschrieben haben und noch 2 Variablen, die den Wert aus den beiden InputBoxen auslesen.


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 
Jetzt noch schnell einen Wert in der DllCall ändern und dann sind wir fertig.
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!
Attached Files
File Type: rar Tutorial.rar (104.3 KB, 117 views)
HardCore.1337 is offline  
Thanks
33 Users
Old 01/31/2010, 12:09   #2
 
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
thx, 1.) weil du dir die Mühe gemacht hast mir das zuvor persönlich beizubringen und 2.)
weil sowas noch gefehlt hat^^

ich hoff nur ich find bald nen Assembler für Java o0
.nAno is offline  
Thanks
1 User
Old 01/31/2010, 12:10   #3
 
Shadowz75's Avatar
 
elite*gold: 0
Join Date: Mar 2009
Posts: 443
Received Thanks: 597
Du solltest noch dazu schreiben, dass man mit AutoIt keine Managed(.Net) Dlls aufrufen kann, da sie Managed Code erzeugen
Shadowz75 is offline  
Thanks
1 User
Old 01/31/2010, 16:47   #4
 
HardCore.1337's Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
Video wurde hinzugefügt
HardCore.1337 is offline  
Old 02/01/2010, 18:34   #5
 
ax5's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 1,050
Received Thanks: 472
A Good tip for you add subtitles to your video so people that is not German can see and understand it


Have a nice day
ax5 is offline  
Old 02/01/2010, 18:50   #6
 
HardCore.1337's Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
My English is not the best
The tutorial in English would be bad
HardCore.1337 is offline  
Old 02/01/2010, 18:56   #7
 
ax5's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 1,050
Received Thanks: 472
Talking

Quote:
Originally Posted by General Desert View Post
My English is not the best
The tutorial in English would be bad
I Recommend you to try and use

ax5 is offline  
Old 02/01/2010, 18:57   #8
 
HardCore.1337's Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
Google Translator is buggy.
HardCore.1337 is offline  
Old 02/21/2010, 19:45   #9
 
elite*gold: 0
Join Date: Jan 2010
Posts: 4
Received Thanks: 0
hallo
was soll das ding rechnen?
beide eingabefelder "deine erste Zahl ?"
in der form steht was mit wurzel?

danke
gruss roland_k
super47 is offline  
Old 02/21/2010, 20:06   #10
 
ax5's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 1,050
Received Thanks: 472
Quote:
Originally Posted by General Desert View Post
Google Translator is buggy.
Lol try it man more people will like to understand this video
ax5 is offline  
Old 02/21/2010, 20:51   #11
 
elite*gold: 0
Join Date: Nov 2008
Posts: 239
Received Thanks: 48
google translate is rubbish ^.^

it is doing so mutch faults while translating
it is worser as my english ;D
Waynee is offline  
Old 02/21/2010, 21:31   #12


 
Ende!'s Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 6,379
Received Thanks: 7,998
Schönes Tutorial, gut verständlich, danke ^^
Ende! is offline  
Old 02/21/2010, 21:32   #13
 
ax5's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 1,050
Received Thanks: 472
Quote:
Originally Posted by Waynee View Post
google translate is rubbish ^.^

it is doing so mutch faults while translating
it is worser as my english ;D
hehe thats true
ax5 is offline  
Old 02/21/2010, 23:52   #14

 
LordKill's Avatar
 
elite*gold: 41
Join Date: Oct 2007
Posts: 1,950
Received Thanks: 3,120
nettes tutorial, habe nun mit c++ angefangen und werde demnächst paar dlls machen und sie vorerst mit autoit nutzen
1000. post =O
LordKill is offline  
Old 02/22/2010, 21:39   #15
 
HardCore.1337's Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
Quote:
hallo
was soll das ding rechnen?
beide eingabefelder "deine erste Zahl ?"
in der form steht was mit wurzel?

danke
gruss roland_k
mein fehler. Das zweite Eingabe Feld soll folgich "...bitte zweite Zahl" heißen.
Also nochmal verständlich.
Man gibt 2 Zahlen ein. Diese werden dann multipliziert und aus dem produkt wird die Wurzel gebildet
HardCore.1337 is offline  
Thanks
1 User
Reply




All times are GMT +2. The time now is 06:59.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.