Hallo, habe wieder mal eine Frage bzgl. dem Lesen aus einem FT245RL. Ich benutze hierfür den CDM (Combined Driver Model) mit der FTD2xx DLL. Es ist wirklich sehr bequem mit Hilfe der zur Verfügung gestellten Funktionen zu programmieren. Mit dem VCP habe ich es nicht zu 100% hinbekommen, aber die Geschwindigkeit von ca. 300kByte/sek. wäre ja ohnehin nicht so berauschend. Aber nun zum eigentlichen Problem! Im Programmierhandbuch der D2xx.dll stehen die Methoden in der Sprache C detailiert drin. Ich programmiere zur Zeit in VB6. Das ist im Grunde kein Problem. Der Loopback-Test funktioniert 1A und alle anderen Funktionen funktionieren nach erfolgter Deklaration auch. Die Funktion "FT_Read" bekommt als Argument den Handler (Nummer, die das FT245RL genau repräsentiert), ReadBuffer(hier wird der gelesene Inhalt gebuffert), BytesToRead (gewünschte Anzahl von Bytes, die gelesen werden sollten) und zum Schluss als Parameter noch BytesRead (tatsächliche Anzahl von Bytes, die definitiv gelesen worden sind). Wenn alles geklappt hat und BytesToRead und BytesRead ident sind, wird von der Funktion 1 bzw. FT_OK zurückgegeben. Das habe ich richtig verstanden. Das Problem, was ich jetzt habe ist, dass es in VB6 keine Referenzen gibt (so wie in C). Im Programmierhandbuch wird ein statisches Feld dieser Read-Methode zurückgegeben, die dann, sofern ich das recht verstehe, Byte für Byte in dieses Feld abspeichert. Ich kann in VB6 aber nur eine Variable als Buffer nehmen. Bei mir beispielsweise ergeben jeweils 4 Bytes eine ganze Zahl. Deshalb darf ich nur ein Vielfaches von 4 Bytes aus dem FT245RL lesen. Zuerst kommt das niederwertigste Byte und zum Schluss das höherwertigste Byte. Wenn ich jetzt zum Beispiel 256 Bytes mit FT_Read lese, werden in der Buffervariable alle 256 Bytes drin stehen. Jedoch weiß ich nicht, wie ich die dann zu einzelnen Dezimalzahlen zusammenstoppeln soll. In C wäre das ja kein Problem, da es dort Referenzen gibt und ich einen Buffer in Form eines ganzen Feldes übergeben könnte, der mir die einzelnen Bytes hält - sofern ich das richtig verstanden habe. Ich hoffe, ich habe mein Problem einigermaßen präzise geschildert und nicht zu viel unnötige Informationen gepostet. Ich habe nur deswegen so viel geschrieben, weil ich zeigen wollte, dass ich trotz intensiver Überlegungen eine kleine Hilfe brauche! Danke! lg, Willi
Auszug aus der Doku: Visual Basic: Parameter Type Description: Handle long: A number that uniquely identifies the device Buffer string: String to hold the data read from the device BytesToRead long: The number of bytes to read from the device BytesReturned long: The number of bytes that were read from the device C: Parameter Type Description: Handle pvoid: A pointer to a number that uniquely identifies the device Buffer lpvoid: A pointer to a char array to hold the data read from the device BytesToRead: dword The number of bytes to read from the device BytesReturned: lpdword A pointer to a dword that gets the number of bytes read ------------------------------------------------------------------------ - Also wird zur Speicherung unter C ein Character-Array genommen und bei VB ein einfacher String. Nur, wenn ich jetzt angenommen 128 Bytes lese, dann gibt die Funktion so lange nichts zurück, bis alle 128 Bytes gelesen wurden. Wenn die 128 Bytes gelesen wurden, dann wird FT_OK ausgegeben und der Inhalt wird im Buffer geschrieben. Dieser Buffer ist nur eine String-Variable. Ich weiß jetzt leider nicht genau, wie ich da byteweise den Inhalt rekonstruieren soll. lg und Danke! Willi
Habe schon verstanden! Für alle, die noch immer nicht genau wissen, was ich eigentlich wollte und später auch vor diesem Problem stehen: Man muss einen String zerlegen um dann die Daten byteweise zu erhalten. Es gibt in C keine Strings. Es gibt nur Char-Arrays. In VB gibt es Strings. Das ist in etwa äquivaltent. In VB: Dim MyString As String * 256 In C: char my_array [256] //eigentlich 257 Werte intern, da 0 am Schluss Diese Definitionen haben gleiche Bedeutung. lg, Willi
> char my_array [256] //eigentlich 257 Werte intern, da 0 am Schluss
Sicher, dass da ne Null ist? Soweit ich weiss, wird die Null nur
eingefügt, wenn du einen Text, eingeschlossen in '"' angibst.
Ralf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.