Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Api-Funktionen mit logischen Rückgabewerten

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
hitech



Anmeldungsdatum: 29.11.2011
Beiträge: 5
Wohnort: Schwäbisch Gmünd

BeitragVerfasst am: 29.11.2011, 13:50    Titel: Api-Funktionen mit logischen Rückgabewerten Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 29.11.2011, 16:07    Titel: Antworten mit Zitat

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, 19:45, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
RWK



Anmeldungsdatum: 04.07.2011
Beiträge: 44

BeitragVerfasst am: 30.11.2011, 09:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 01.12.2011, 17:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hitech



Anmeldungsdatum: 29.11.2011
Beiträge: 5
Wohnort: Schwäbisch Gmünd

BeitragVerfasst am: 15.12.2011, 15:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 15.12.2011, 18:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz