[How-To]Mit Dll's arbeiten

  • Hi,

    da wahrscheinlich noch keiner die DLL Funktionen von AutoIT zu benutzen weiß, werde ich diesen Bug mal beheben x)

    AutoIT wurde für die Verwendung von DLL'S auch angepasst.
    Man kann auch Strukturen erstellen, wie die aus C++/C#/etc..

    Code
    // Eine Struktur in C#
    public struct Farben
    {
    public int Rot = 0xFF0000;
    public int Blau = 0x00FF00;
    public int Grün = 0x0000FF;
    }

    Halt nicht so mit den geschweiften Klammern, sondern über eine Funktion und den Inhalt als String.

    Code
    $sFarben =  "int Rot;int Blau;int Grün;"
    $sFarbenStruct = DllStructCreate( $sFarben)


    Damit hätten wir jetzt eine Leere Struct.

    Es gibt noch Funcs mit denen man Daten in Structs eintragen und Auslesen kann und den Pointer einer in AutoIT erstellten Struct ermitteln kann.

    Um eine Dll zu Nutzen kann man sie entweder Manuell öffnen und schließen
    oder das Automatisch erledigen lassen.

    Manuell :

    Code
    $DLL = DllOpen("eBox.dll")
    $eBox = DllCall($DLL,"none","ptr",$eBoxStruct)
    DllClose($DLL)

    Automatisch:

    Code
    $eBox = DllCall("eBox.dll","none","Create","ptr",$eBoxStruct_Ptr)

    In meinem Beispiel seht ihr die Funktion DllCall.
    So wird sie angewendet:

    Code
    DllDatei oder Handle von DllOpen
    Typ des Rückgabewertes - "int" , "char" usw. (wenn keine rückgabe dann "none")
    Funktionsname die aufgerufen werden soll
    Parameter1 Typ (int,char,ptr,usw.)
    Parameter1 Inhalt
    usw...

    Bei meiner Funktion steht noch "$eBoxStruct_Ptr"
    und als Typ "ptr".

    Hier der Code Dazu

    _____

    Wenn aber eine DLL einen Pointer zu einer anderen Struct zurückgibt wo Daten eingetragen sind, muss man eine neue ´Struct definieren und dne Pointer angeben.

    Code
    $DllCall = DllCall("mydll.dll","ptr","ShowInfo","int",1)
    
    
    $StructPointer = $DllCall[0]
    
    
    $s_InfoStruct = "char[] Text; int Type"
    
    
    $InfoStruct = DllCreateStruct($s_InfoStruct, $StructPointer)

    Somit wäre direkt alles in der Struct Ausgefüllt.
    Nun muss man man es nur noch auslesen.

    Code
    $Text = DllStructRead($InfoStruct,1)
    $Type = DllStructRead($InfoStruct,2)


    Schon hat man alles.

    Das ist wirklich einfach.

    ->> More will come <<--

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!