Probleme mit einer lib.dll

  • Mahlzeit :)

    Nun dann mal zu meiner Situation..

    Ich habe eine lib.dll, die geschrieben wurde um mit ihr in C# und in VB zu arbeiten.
    Nun meine erste Frage tut das überhaupt was zur Sache, kann ich damit auch in AutoIT arbeiten?
    Dann habe ich noch nie mit DllCall etc gearbeitet weiß also nicht so ganz wie, wann und wo ich diese Funktion einsetze. Ich habe mir die Beispiele in VB und C# angeguckt und denke sie zu verstehen, dennoch weiß ich nicht so ganz wie ich es in AutoIT schreibe. Wie importiere/include ich die .dll, einfahch mit FileInstall und dann mit DllCall drauf zugreifen?!

    In der Hilfe unter DllCall versteh ich nicht so ganz das Beispiel. :x

    Hoffe ihr könnt mir irgendwie helfen..

  • Richtig, die DLL musst du irgendwie mitliefern, etwa mit FileInstall. Wenn es eine COM-DLL funktioniert DLLCall nicht, dann musst du mit regsvr32 und ObjCreate was machen. Bei einer normalen DLL funktioniert DLLCall. ist es .NET, geht gar nichts in AutoIt.
    Genauer kann ich leider nichts sagen, da meine Glaskugel kaputt ist.

  • Die Funktionen der Lib

    Die KLib besteht aus 11 Klassen, 3 Stück davon sind für euch relevant.

    • Client.cs => Die HauptKlasse, von der aus alles gesteuert wird
    • User.cs => Die UserKlasse, sie beinhaltet Informationen über einzelne User
    • Message.cs => Die MessageKlasse, mit der ihr Informationen über eine ChannelMessage bekommt.

    ChatSystem [Enum]:

    • DE
    • AT
    • CH
    • MFC
    • Nothing

    MessageTyp [Enum]

    • Public
    • Private
    • Enum


    Funktionen der ClientKlasse:

    • string StayOnlineMessage: z.B.: "/p James: {0}", der zusendene String.
    • bool StayOnline: Gibt an, ob der Bot online bleiben soll
    • bool AnswerPing: Gibt an, ob ein eingehender Ping beantortet werden soll, soltle eigentlich immer bei true bleiben.
    • bool AnswerAuthString: Gibt an, ob der Bot auf den AuthString antworten soll, wenn der Wert false ist, kann sich der Bot nicht einloggen!
    • bool IsConnected: Sollte klar sein
    • bool IsLoggedIn: Sollte auch klar sein.
    • void Login(string user, string pass, string channel): Loggt den Bot ein.
    • void Connect(ChatSystem chatSystem, [string proxyport], [int proxyport]): Verbindet sich zu dem angegebenen ChatSystem (Optional per Proxy)
    • void Logout(): Sollte sich von alleine erklären.
    • void SendTextToChannel(string text): Ebenfalls
    • void SendRaw(string text): Sendet RAW-Daten an den Server, das Trennzeichen dabei ist "\0".

    Die EventHandler:

    • public delegate void ChannelJoinHandler(object sender, User user);
    • public delegate void AuthHandler(object sender, string AuthString);
    • public delegate void UserListHandler(object sender, List<User> users);
    • public delegate void ChannelLeaveHandler(object sender, User user);
    • public delegate void ChannelMessageHandler(object sender, Message message);
    • public delegate void PingHandler(object sender, User user, string key);
    • public delegate void PopupHandler(object sender, string Message, string[] token);
    • public delegate void StringReceivedHandler(object sender, string[] token);
    • public delegate void ExceptionHandler(object sender, Exception ex);
    Mein Code
    [autoit]

    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Nuddels", 752, 445, 192, 124)
    GUISetBkColor(0xA0A0A0)
    $Input1 = GUICtrlCreateInput("Nickname", 16, 24, 121, 21)
    $Input2 = GUICtrlCreateInput("Passwort", 16, 56, 121, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
    $Combo1 = GUICtrlCreateCombo("DE", 16, 88, 121, 25)
    GUICtrlSetData(-1, "AT|CH|MFC", "DE")
    $Button1 = GUICtrlCreateButton("Login", 32, 128, 75, 25, 0)
    $Button2 = GUICtrlCreateButton("Logout", 32, 160, 75, 25, 0)
    $Edit1 = GUICtrlCreateEdit("", 144, 24, 393, 344, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
    $List1 = GUICtrlCreateList("", 536, 24, 113, 344)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $Connect = DllCall("C:\Users\mikromaxx\Downloads\KLib\KLib.dll","none","Connect","ChatSystem","CH")
    $Login = DllCall("C:\Users\mikromaxx\Downloads\KLib\KLib.dll","none","Login","str","NICK","str","PW","str","CHANNEL")
    Case $Button2
    $logout = DllCall("C:\Users\mikromaxx\Downloads\KLib\KLib.dll","none","Logout")
    MsgBox(0,"",$logout)
    EndSwitch
    WEnd

    [/autoit]

    Aber der Code funzt nicht :S

    Momentan trage ich die Daten noch manuell ein, das heißt ich brauche noch kein GUICtrlRead, ich habe halt das Gefühl beim DllCall stimmt was nicht, denn beim Logout Button hab ich als Funktion auch schon "Keks" probiert und ich bekomm dennoch ein Erfolg zurück gegeben..

    Ich hoffe das fällt noch nicht unter Bot-Coding?! ;(

    Gruß

    • Offizieller Beitrag

    Hallo,

    mt der Dateiendung ist es wohl eher C#.

    Ruf mal die Connect-Funktion so auf:

    [autoit]

    $Connect = DllCall("C:\Users\mikromaxx\Downloads\KLib\KLib.dll","none","Connect","int","2") ; DE = 0, AT = 1, CH = 2, MFC = 3, Nothing = 4

    [/autoit]


    Enum sind in C und wahrscheinlich auch in C# vom Type int und bedeutet das der 1. Variablen der Wert 0, der 2. Variablen der Wert 1 usw. zugewiesen wird.

  • Danke für den Hinweis, nur woher weiß ich jetzt ob das richtig ist.., jetzt passiert nichts, vorher ist auch nichts passiert.. ^^ :S
    Und bei dem Login scheint alles richtig zu sein?!