USB Geräte ansprechen

buk

Mitglied
Guude,

mich interessiert es, wie ich unter Java USB Geräte ansprechen kann. Mit C++ spreche ich USB Geräte über die CreateFile/ReadFile/WriteFile/DeviceIoControl/ Funktionen an. Im speziellen geht es mir hierbei um, über USB angeschlossene Drucker. Es ist auch nichts wildes, ich will lediglich die DeviceID des Druckers auslesen, welche vom Typ her ein String ist. Diese will ich auswerten, ggfs. verändern und dann wieder zum Drucker senden. Unter C++ geschieht das Senden und Empfangen über die ReadFile und WriteFile Funktionen.

Ich bin beim suchen hier im Forum und per Google desöfteren über die JNI gestolpert. Nur wäre ich doch damit wieder an das Betriebssystem gebunden, da ich unter Windows zum Beispiel die <Windows.h> einbinden müsste um auf die WinApi32 zugreifen zu können. Hat Java da nichts eigenes?

Ihr merkt, ich stehe da auf dem Schlauch und mir fehlt komplett der Ansatz. Es wäre super wenn mich mal jemand in die richtige Richtung schubsen könnte.

Grüße,
buk
 
Zuletzt bearbeitet von einem Moderator:
Guude,

nach reichlicher Überlegung werde ich mich wohl mit C# und P/Invoke[1] beschäftigen.
Schade das mir Java da nichts anbieten kann, andererseits ist Java eine Platformunabhängige Sprache, und bevor ich mit JNI anfange bleibe ich besser bei C/C++ bzw. C# mit P/Invoke.

Danke für eure Antworten!

Regards,
buk

[1] pinvoke.net: the interop wiki!
 
Naja, ich seh das so... Entweder dir JVM bietet mir den Platformunabhängigen Zugriff auf die gewünschte HW, oder ich muss selbst für jede Plattform was basteln und eine einheitliche API drüber legen. Das Ergebnis ist, bis auf den Fakt dass ich die DLL für die Plattform mitliefere und nicht die JVM, das gleiche.

Mit C# wird die Sache nicht wirklich besser. Nur ist's da schon eingebaut. Aber mit Plattformunabhängig wäre ich da vorsichtig, auch wenn es Dinge wie MONO gibt.

- Alex
 
Guude,

naja es geht ja eigentlich nur darum, an diesen String zu kommen, diesen auszulesen, auszuwerten, zu verändern, und wieder zum Drucker zu senden. In C++ spreche ich eben über die WinApi32 Funktionen CreateFile, ReadFile, WriteFile, ... mit dem Drucker. Das ich in Java dazu keine Möglichkeit habe, kann ich mir fast nicht vorstellen ...

Regards,
buk
 
Vorstellung hin oder her: Die JVM bzw. die Java Standard API bietet von Haus aus nichts an, mit dem du USB-mäßig lesen oder schreiben kannst. Die von die angesprochenen Methoden werden in Java nur in Verbindung mit dem Dateisystem genutzt.

Du kommst also um eine native Lösung nicht drum rum.
 
Guude,
Vorstellung hin oder her: Die JVM bzw. die Java Standard API bietet von Haus aus nichts an, mit dem du USB-mäßig lesen oder schreiben kannst. Die von die angesprochenen Methoden werden in Java nur in Verbindung mit dem Dateisystem genutzt.
Aus diesem Grund bleibe ich ja schlussendlich bei C/C++ und der WinApi32, bzw. schaue mal das ich das mit C# und P/Invoke hinbekomme.

Du kommst also um eine native Lösung nicht drum rum.
Du hast ja recht. Aber es wäre schon schöne gewesen, mal meinen Horizont zu erweitern ...

Regards,
buk
 
Du hast ja recht. Aber es wäre schon schöne gewesen, mal meinen Horizont zu erweitern ...

Dem steht doch nichts im Wege? Wenn du unter Linux und MacOSX noch eine vergleichbare API findest, hast du die 3 Major-OS abgedeckt und kannst eine einheitliche Java-API drauf setzen und der Community anbieten. Dann hast du deine Plattformunabhängigkeit mit Java wieder 🙂

- Alex
 
Mit C# wird die Sache nicht wirklich besser. [...] Aber mit Plattformunabhängig wäre ich da vorsichtig, auch wenn es Dinge wie MONO gibt.
wenn man unter C# mit P/Invoke anfängt, gibt es Plattformunabhängigkeit nicht mehr ... da ist egal ob es mit Mono theoretisch geht

nach reichlicher Überlegung werde ich mich wohl mit C# und P/Invoke[1] beschäftigen. [...] bevor ich mit JNI anfange bleibe ich besser bei C/C++ bzw. C# mit P/Invoke.
wieso willst Du Dich selber mit P/Invoke geiseln?? ... nimm C++/CLI und binde die Assembly in C# ein ... C++/CLI ist genau dafür gedacht - #include "windows.h" und gut ist

hand, mogel

PS: C++/CLI != C/C++ !!
 
Guude,
Und an deiner Stelle würde ich mich direkt entweder auf C oder C++ beschränken. Oder wozu brauchst du den .NET-Kram?
den .NET-Kram brauch ich nicht. Wir benutzen die guten alten Microsoft Foundation Classes als Framework. Was auch super funktioniert. Es ging hier lediglich um meinen sportlichen Ehrgeiz mal was neues zu versuchen.

Regards,
buk
 
Hallo,

ist jetzt nicht so mein Gebiet, aber... es gibt in der Api eine Menge "PrinterXXX"-Klassen. Man kann mit Java zwar nicht die USB-Ports an die ein Drucker angeschlossen ist direkt abfragen, aber man kann sich so einige Infos über die im Betriebsystem installierten Drucker ausgeben lassen.

MfG
hansmueller
 

Zurück
Oben