Hi,
ih würde gerne mein Programm USB-LED in C++ übersetzen.
Hier das vollständige Programm in AuotIT:
Spoiler anzeigen
#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 -----------------------------------------------------------------------------------------------------------------------------
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUICloseOnESC", 1) ; ESC drücken beendet Programm nicht
Opt("MustDeclareVars", 1) ; Variablen müssen deklariert werden
Global $Maindialog, $title = "USB-LED", $version = "1.0.0.0", $nMsg, $hDevice
Dim $LED[3][3]
Global Const $FT_STATUS = "ulong"
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
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
$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)
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
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
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
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
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
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
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.