|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
hitech
Anmeldungsdatum: 29.11.2011 Beiträge: 5 Wohnort: Schwäbisch Gmünd
|
Verfasst am: 29.11.2011, 14:50 Titel: Api-Funktionen mit logischen Rückgabewerten |
|
|
Ich benutze eine DLL für den Zugriff auf eine USB-IO-Karte. Das funktioniert auch alles sehr gut. Es gibt aber in dieser API einige Befehle, welche als Rückgabe einen logischen Wert liefern. Wie muss ich diesen Wert deklarieren, um das Ergebis auch verwenden zu können?
dim library as any ptr
dim OpenDevice as function(byval operand1 as integer) as integer
dim PowerGood as function(byval operand1 as integer) as ????
dim Connected as function(byval operand1 as integer) as ?????
library = dylibload("K8061.DLL")
OpenDevice = dylibsymbol(library, "OpenDevice")
PowerGood = dylibsymbol(library, "PowerGood")
Connected = dylibsymbol(library, "Connected")
dim connect as ?????? = connected(0)
Wenn connect und der Rückgabewert als integer deklariert ist, bekomme ich als Ergebnis immer 0, obwohl die Verbindung besteht.
Deklariere ich den Rückgabewert als Bitfeld, bekomme ich beim kompilieren den Fehler
Invalid assignment/conversion in connect.cb1 = connected(0)
Wie muss ich vorgehen um die Rückgabewerte wahr und falsch in irgendeiner Form als 0 und 1 oder ähnlich zu bekommen?
In anderen Programmiersprachen ist das sehr einfach weil die logische Variablen kennen.
Gruß Uli |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 29.11.2011, 17:07 Titel: |
|
|
Aus der "k8061_softwarepack_2011.zip" 'K8061DemoVB6 '
nach FB umgesetzt:
Code: | Dim Shared As Any Ptr K8061
Dim Shared OpenDevice As Function () As Integer
Dim Shared CloseDevices As Sub ()
Dim Shared CloseDevice As Sub (ByVal CardAddress As Integer)
Dim Shared ReadAnalogChannel As Function (ByVal CardAddress As Integer, ByVal Channel As Integer) As Integer
Dim Shared PowerGood As Function (ByVal CardAddress As Integer) As Integer
Dim Shared Connected As Function (ByVal CardAddress As Integer) As Integer
Dim Shared ReadVersion As Sub (ByVal CardAddress As Integer, Buffer As Any Ptr)
Dim Shared ReadAllAnalog As Sub (ByVal CardAddress As Integer, Buffer As Integer)
Dim Shared OutputAnalogChannel As Sub (ByVal CardAddress As Integer, ByVal Channel As Integer, ByVal Data As Integer)
Dim Shared OutputAllAnalog As Sub (ByVal CardAddress As Integer, Buffer As Integer)
Dim Shared ClearAnalogChannel As Sub (ByVal CardAddress As Integer, ByVal Channel As Integer)
Dim Shared SetAllAnalog As Sub (ByVal CardAddress As Integer)
Dim Shared ClearAllAnalog As Sub (ByVal CardAddress As Integer)
Dim Shared SetAnalogChannel As Sub (ByVal CardAddress As Integer, ByVal Channel As Integer)
Dim Shared OutputAllDigital As Sub (ByVal CardAddress As Integer, ByVal Data As Integer)
Dim Shared ClearDigitalChannel As Sub (ByVal CardAddress As Integer, ByVal Channel As Integer)
Dim Shared ClearAllDigital As Sub (ByVal CardAddress As Integer)
Dim Shared SetDigitalChannel As Sub (ByVal CardAddress As Integer, ByVal Channel As Integer)
Dim Shared SetAllDigital As Sub (ByVal CardAddress As Integer)
Dim Shared ReadDigitalChannel As Function (ByVal CardAddress As Integer, ByVal Channel As Integer) As Integer
Dim Shared ReadAllDigital As Function (ByVal CardAddress As Integer) As Integer
Dim Shared OutputPWM As Sub (ByVal CardAddress As Integer, ByVal Data As Integer)
Dim Shared ReadBackDigitalOut As Function (ByVal CardAddress As Integer) As Integer
Dim Shared ReadBackAnalogOut As Sub (ByVal CardAddress As Integer, Buffer As Integer)
Dim Shared ReadBackPWMOut As Function (ByVal CardAddress As Integer) As Integer
K8061 = DylibLoad( "K8061.DLL" )
If K8061>0 Then
OpenDevice = DylibSymbol( K8061, "OpenDevice" )
CloseDevices = DylibSymbol( K8061, "CloseDevices" )
CloseDevice = DylibSymbol( K8061, "CloseDevice" )
ReadAnalogChannel = DylibSymbol( K8061, "ReadAnalogChannel" )
PowerGood = DylibSymbol( K8061, "PowerGood" )
Connected = DylibSymbol( K8061, "Connected" )
ReadVersion = DylibSymbol( K8061, "ReadVersion" )
ReadAllAnalog = DylibSymbol( K8061, "ReadAllAnalog" )
OutputAnalogChannel = DylibSymbol( K8061, "OutputAnalogChannel" )
OutputAllAnalog = DylibSymbol( K8061, "OutputAllAnalog" )
ClearAnalogChannel = DylibSymbol( K8061, "ClearAnalogChannel" )
SetAllAnalog = DylibSymbol( K8061, "SetAllAnalog" )
ClearAllAnalog = DylibSymbol( K8061, "ClearAllAnalog" )
SetAnalogChannel = DylibSymbol( K8061, "SetAnalogChannel" )
OutputAllDigital = DylibSymbol( K8061, "OutputAllDigital" )
ClearDigitalChannel = DylibSymbol( K8061, "ClearDigitalChannel" )
ClearAllDigital = DylibSymbol( K8061, "ClearAllDigital" )
SetDigitalChannel = DylibSymbol( K8061, "SetDigitalChannel" )
SetAllDigital = DylibSymbol( K8061, "SetAllDigital" )
ReadDigitalChannel = DylibSymbol( K8061, "ReadDigitalChannel" )
ReadAllDigital = DylibSymbol( K8061, "ReadAllDigital" )
OutputPWM = DylibSymbol( K8061, "OutputPWM" )
ReadBackDigitalOut = DylibSymbol( K8061, "ReadBackDigitalOut" )
ReadBackAnalogOut = DylibSymbol( K8061, "ReadBackAnalogOut" )
ReadBackPWMOut = DylibSymbol( K8061, "ReadBackPWMOut" )
EndIf |
aus 'K8061_DLL_manual.pdf'
Connected (CardAddress) '(CardAddress = 0 - 7) je nach Jumper (A1, A2, A3) _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Zuletzt bearbeitet von volta am 01.12.2011, 20:45, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
RWK
Anmeldungsdatum: 04.07.2011 Beiträge: 44
|
Verfasst am: 30.11.2011, 10:24 Titel: |
|
|
und vielleicht ist ja auch 0 für connected als Rückgabewert ok.
Guck doch mal was kommt wenn es nicht verbunden ist...
True = 0
False = -1 |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 01.12.2011, 18:37 Titel: |
|
|
Nein RWK,
aus der Beschreibung geht hervor, dass bei erfolgreicher Funktionsausführung ein Wert <> 0 übergeben wird.
Code: | If Connected(CardAddress) Then
Print "USB angeschlossen"
Else
Print "Karte nicht erkannt"
EndIf |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
hitech
Anmeldungsdatum: 29.11.2011 Beiträge: 5 Wohnort: Schwäbisch Gmünd
|
Verfasst am: 15.12.2011, 16:46 Titel: |
|
|
Hallo RWK, Volta,
weder die eine, noch die andere Funktion funktioniert. Die Abfrage
If connected(0) then liefert als Ergebnis immer 0, egal ob True oder false. Auch der Rückgabewert des Integers ist immer 0.
Wenn ich das Ganze in Xbase schreibe bekomme ich den korrekten Wert True oder False. |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 15.12.2011, 19:16 Titel: |
|
|
Zitat: | If connected(0) then liefert als Ergebnis immer 0, egal ob True oder false. | False = 0 und True <> 0, also liefert connected(0) immer 'False' (ist die Kartenadresse wirklich 0 ?).
Zitat: | Wenn ich das Ganze in Xbase schreibe bekomme ich den korrekten Wert True oder False. | ja was denn True oder False? _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|