Hallo und guten Morgen zusammen.
Hallo DeepThinking,
für Aufrufe von C Routinen aus Java heraus müssen gewisse Calling Conventions eingehalten werden, eben JNI.
Die Funktionen in der Treiber DLL erfüllen diese Konventionen naturgemäß nicht. (ich habe sowas jedenfalls noch nie bei einer Treiber DLL gesehen).
Wenn Du diese Funktionen aufrufen willst, bleibt Dir also nichts anderes übrig, als in der bereits beschriebenen Weise eigene Funktionen nach JNI Konvention zu schreiben,
die ihrerseits die Funktionen in der Treiber DLL aufrufen bzw. deren
Ergebnisse zurück geben, eben "wrappen".
Dabei mußt Du aber warscheinlich ständig komplexe C Strukturen in Java Objekte hin und her wandeln, was sehr aufwendig und Performancelastig sein dürfte.
Liegen dann keine Standard Konstrukte wie z. B. AVI Formate vor,
kannst dann kaum was mit den übertragenen Daten anfangen.
Normalerweise bindet der Treiber doch ein Gerät in die (vermutlich Windows) Umgebung ein.
Die Philosophie dabei ist, die Geräteeigenschaften im Treiber zu lassen und die Daten der Geräte als Stream zu lesen bzw. schreiben.
Der Vorteil ist, daß sich die Applikationsentwickler nur noch wenig
mit den besonderen Eigenschaften eines Geräts beschäftigen müssen,
sondern einfach nur mit Datenströmen arbeiten.
Java unterstützt Stream Verarbeitung auf breiter Front, man spricht sogar schon von einem Stream Zoo ;-)
Ich würde mich erst mal in diese Richtung orientieren, denn LowLevel
Geräte Programmierung auf Treiberebene hat genauso seine Tücken (z. B Timingprobleme) wie JNI (z. B. Speicherverletzungen).