[How-To]Mit Dll's arbeiten

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [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..

      Quellcode

      1. // Eine Struktur in C#
      2. public struct Farben
      3. {
      4. public int Rot = 0xFF0000;
      5. public int Blau = 0x00FF00;
      6. public int Grün = 0x0000FF;
      7. }


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

      Quellcode

      1. $sFarben = "int Rot;int Blau;int Grün;"
      2. $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 :

      Quellcode

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


      Automatisch:

      Quellcode

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


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

      Quellcode

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


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

      Hier der Code Dazu

      Quellcode

      1. ;; ->> [Bearbeitbar] <<- ;;
      2. $sText = "It Works!" ;// Text der Box
      3. $sTitle = "eBox" ;// Titel der Box
      4. $iFlag = 2 ;// 1=none,2=Info,3=Stop,4=Question,5=Warning
      5. ;; ->> [/Bearbeitbar] <<- ;;
      6. $s_eBox = "LPSTR Text; LPSTR Title; int Flag"
      7. $eBoxStruct = DllStructCreate($s_eBox)
      8. DllStructSetData($eBoxStruct,1,$sText)
      9. DllStructSetData($eBoxStruct,2,$sTitle)
      10. DllStructSetData($eBoxStruct,3,$iFlag)
      11. $eBoxStruct_Ptr = DllStructGetPtr($eBoxStruct)
      Alles anzeigen


      _____

      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.

      Quellcode

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


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

      Quellcode

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

      Schon hat man alles.

      Das ist wirklich einfach.

      ->> More will come <<--
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )