AutoIT Programm in C++ übersetzen

  • Hi,

    ih würde gerne mein Programm USB-LED in C++ übersetzen.

    Hier das vollständige Programm in AuotIT:

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=icon.ico
    #AutoIt3Wrapper_Res_Comment=Ein Programm von HDW-Computer-Forum http://www.hdw-computer-forum.de
    #AutoIt3Wrapper_Res_Description=by Michi26206
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=by HDW-Computer-Forum
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs -----------------------------------------------------------------------------------------------------------------------------

    USB-LED.exe (C) by Michi26206 - Programm zu, schalten einer LED über USB

    #ce -----------------------------------------------------------------------------------------------------------------------------

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

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUICloseOnESC", 1) ; ESC drücken beendet Programm nicht
    Opt("MustDeclareVars", 1) ; Variablen müssen deklariert werden

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

    Global $Maindialog, $title = "USB-LED", $version = "1.0.0.0", $nMsg, $hDevice
    Dim $LED[3][3]
    Global Const $FT_STATUS = "ulong"

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

    Global Enum $FT_OK, _
    $FT_INVALID_HANDLE, _
    $FT_DEVICE_NOT_FOUND, _
    $FT_DEVICE_NOT_OPENED, _
    $FT_IO_ERROR, _
    $FT_INSUFFICIENT_RESOURCES, _
    $FT_INVALID_PARAMETER, _
    $FT_INVALID_BAUD_RATE, _
    $FT_DEVICE_NOT_OPENED_FOR_ERASE, _
    $FT_DEVICE_NOT_OPENED_FOR_WRITE, _
    $FT_FAILED_TO_WRITE_DEVICE, _
    $FT_EEPROM_READ_FAILED, _
    $FT_EEPROM_WRITE_FAILED, _
    $FT_EEPROM_ERASE_FAILED, _
    $FT_EEPROM_NOT_PRESENT, _
    $FT_EEPROM_NOT_PROGRAMMED, _
    $FT_INVALID_ARGS, _
    $FT_NOT_SUPPORTED, _
    $FT_OTHER_ERROR, _
    $FT_DEVICE_LIST_NOT_READY

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

    Global $hFTDdll = DllOpen("ftd2xx.dll")

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

    $hDevice = FT_Open()

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

    ;fals das Device nich angesteckt ist Programm beenden
    If $hDevice = "0x00000000" Then
    MsgBox(48, "Fehler", "FTDI-Chip wurde nicht erkannt, ist das Geräte eingesteckt?")
    Exit
    EndIf

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

    $Maindialog = GUICreate($title & " " & $version, 200, 200, -1, -1)
    GUISetBkColor(0xFFFFFF)
    $LED[1][1] = GUICtrlCreateButton("LED ein", 70, 140, 60, 25, 0)
    GUICtrlSetState($LED[1][1], $GUI_HIDE)
    $LED[1][2] = GUICtrlCreateLabel("LED ein", 65, 60, 100, 25)
    GUICtrlSetFont($LED[1][2], 15)
    GUICtrlSetColor($LED[1][2], 0x006600)
    $LED[2][1] = GUICtrlCreateButton("LED aus", 70, 140, 60, 25, 0)
    $LED[2][2] = GUICtrlCreateLabel("LED aus", 65, 60, 100, 25)
    GUICtrlSetFont($LED[2][2], 15)
    GUICtrlSetColor($LED[2][2], 0xCC0000)
    GUICtrlSetState($LED[2][2], $GUI_HIDE)
    GUISetState(@SW_SHOW, $Maindialog)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    FT_SetRts($hDevice)
    FT_Close($hDevice)
    DllClose($hFTDdll)
    Exit
    Case $LED[1][1]
    manage_view("ein")
    FT_ClrRts($hDevice)
    Case $LED[2][1]
    manage_view("aus")
    FT_SetRts($hDevice)
    EndSwitch
    Sleep(10)
    WEnd

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

    Func manage_view($art)
    Switch $art
    Case "ein"
    GUICtrlSetState($LED[2][1], $GUI_SHOW)
    GUICtrlSetState($LED[2][2], $GUI_HIDE)
    GUICtrlSetState($LED[1][1], $GUI_HIDE)
    GUICtrlSetState($LED[1][2], $GUI_SHOW)
    Case "aus"
    GUICtrlSetState($LED[1][1], $GUI_SHOW)
    GUICtrlSetState($LED[1][2], $GUI_HIDE)
    GUICtrlSetState($LED[2][1], $GUI_HIDE)
    GUICtrlSetState($LED[2][2], $GUI_SHOW)
    EndSwitch
    EndFunc ;==>manage_view

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

    Func FT_Open($iDevice = 0)
    ; Prog@ndy
    Local $result = DllCall($hFTDdll, $FT_STATUS, "FT_Open", "int", $iDevice, "ptr*", 0)
    If @error Then Return SetError(1, 0, 0)
    Return SetError($result[0], 0, $result[2])
    EndFunc ;==>FT_Open

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

    Func FT_Close($ftHandle)
    ; Prog@ndy
    Local $result = DllCall($hFTDdll, $FT_STATUS, "FT_Close", "ptr", $ftHandle)
    If @error Then Return SetError(1, 0, 0)
    Return SetError($result[0], 0, $result[0] = 0)
    EndFunc ;==>FT_Close

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

    Func FT_SetRts($ftHandle)
    ; Prog@ndy
    Local $result = DllCall($hFTDdll, $FT_STATUS, "FT_SetRts", "ptr", $ftHandle)
    If @error Then Return SetError(1, 0, 0)
    Return SetError($result[0], 0, $result[0] = 0)
    EndFunc ;==>FT_SetRts

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

    Func FT_ClrRts($ftHandle)
    Local $result = DllCall($hFTDdll, $FT_STATUS, "FT_ClrRts", "ptr", $ftHandle)
    If @error Then Return SetError(1, 0, 0)
    Return SetError($result[0], 0, $result[0] = 0)
    EndFunc ;==>FT_ClrRts

    [/autoit]

    Mit C++ habe ich schon angfagen, die dll Lade ich mit LoadLibarary("ftd2xx.dll");

    Das ganze funktioniert auch. Nur habe ich nun das gleich Problem wie in AutoIt:

    Wie "extrahiere" ich die Funktionen in meinen Code. Den beim compielen sagt er Funktion FT_OPEN not found (oder so ähnlich).

    Ich hoffe es kann mir wer helfen.

    Gruß Michi26206

    Edit BugFix: Ich verschieb das mal zu Sonstiges, H&U ist ja eigentlich für AutoIt-Probleme. ;)

    Einmal editiert, zuletzt von BugFix (10. April 2009 um 11:43)

  • Sorry aber mit C++ kene ich mich ledier net aus.
    Es sollte aber bestimmt möglich sein. Was sagt denn google dazu? Gibt doch bestimmt in einigen C Foren auch solche Probeme.
    Ich habe das erst duch nen Autoit Skript nach Perl wandeln, Ja ich weis ist net sonderlich schwer aber muß auch erst gemacht sein. :rolleyes:

    MfG
    Der_Doc

  • @Michi26206:
    Du muss GetProcAddress (aus der windows.h) benutzen und dann die Rückgabe in den richtigen Funktionszeiger casten.


    So, ich hoffe das hilft dir :)
    Edit: Hier mit Highlighting: http://codepad.org/G33MCpKo

    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 (10. April 2009 um 17:08)