Dll-Grundverständins...

  • Bis jetzt hab ich mich immer schön von Dll ferngehalten, aber jetzt bin ich zwangsweise damit in Berührung gekommen:
    Ich möchte die Beleuchtung meiner G15 verstellen(LCD-Beat), allerdings hab ich keinen Plan, wie ich die Funktionen aufrufen soll, die in der Dll implementiert sind :S
    Problem: Mit der Funktion LgOpenLcdDevice bekomme ich ein Handle zur G15 - bloß wie denn genau?! Brauch ich den Typ ptr?!

    Ihr seht ich hab keine Ahnung, ich wäre wirklich über jede Hilfe dankbar ^^

  • AutoIt sind doch die Typen eh egal, und wie du die DLL callen musst sollte in der Dokumentation dieser stehen. ;)

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • In Autoit sind die Typen egal, aber im Dll-Aufruf eben nicht... ich probier einfach nochmal drauflos...
    Edit: Ich kapiers einfach nicht...

    Spoiler anzeigen

    LgOpenLcdDevice:
    Returns a handle to the first LCD device found in the target-system.
    Index is reserved for later identification of multiple LCD devices.
    Set Exclusive to true if you want exclusive access to your keyboard. This will
    only work if no other program is already accessing the device already.
    If a valid device is returned, no other program will be able to access the
    device until you free it again.
    KeybdVer specifies the keyboard version. It will be set to LGLCD_DDA_G15CLASSIC
    for the Classic G15 and to LGLCD_DDA_G15REFRESH for the G15 Refresh.
    If this function fails it returns a null-pointer.
    Release the handle with LgFreeLcdDevice.

    LgFreeLcdDevice:
    Frees the handle of a LCD device, resets all callbacks.
    Device is the LCD device-pointer to free, returned by LgOpenLcdDevice.


    Kann mir jemand bitte ein kurzes Beispiel geben, wie ich die Verbindung herstelle und dann wieder trenne?
    Bin hier voll am verzweifeln :wacko:

    Einmal editiert, zuletzt von JoEtHeKiLlEr (21. September 2008 um 21:56)

  • Ich hab jetzt deswegen immer noch keine richtige Ahnung von aufbau der Funktion...
    So wie ich das verstanden hätte der Funktionskopf in C++ diesen Aufbau:

    Code
    int LgOpenLcdDevice(int Index = 0, bool Exclusive = false)


    Also du musst folgenden DllCall machen:

    [autoit]

    $Handle = DllCall($DLL_Handle, "int", "LgOpenLcdDevice"); Erst kommt das Handle von DllOpen, dann der Rückgabetyp (das erste also "int") und dann der Funktionsname. Die Param. sind wahrsch. optional, also brauchst du die auch nicht angeben.

    [/autoit]


    Wie mann auf einen Nullpointer mit AutoIt prüft, weiß ich nicht, vllt. mit If $Handle = Ptr(0) Then...
    Edit: Die Funktion könnte auch

    Code
    int LgOpenLcdDevice(bool Exclusive = false)

    heißen und einen Pointer auf ein Array mit Handle, Index und KeybdVer als Eintäge zurückgeben.

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

    Einmal editiert, zuletzt von Fast2 (21. September 2008 um 22:17)

  • In der Zip-Datei scheint auch der Source in C beizuliegen:

    Spoiler anzeigen


    Wie kann ich die Intensity auslesen/setzen?
    Relevant wären dann ja diese Einträge:

    lglcd_dda(BOOL) LgSetKeyboardLight(LCDDEVICE Device, BYTE Intensity);
    lglcd_dda(BOOL) LgGetKeyboardLight(LCDDEVICE Device, BYTE* Intensity);
    Ungefähr sowas?!

    [autoit]

    $dll = DllOpen("lglcd_dda_dll.dll")
    $handle = DllCall($dll, "int", "LgOpenLcdDevice")
    $intensity=DllCall($dll,"BOOL","LgGetKeyboardLight","int",$handle,"byte*","Intensity")
    DllCall($dll,"null","LgFreeLcdDevice","int",$handle)
    DllClose($dll)

    [/autoit]


    Oder brauch ich da so nen DllStruct?!