Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

Auf existierende DLL (in C geschrieben) mittels JAVA zugreifen!

DeepThinking / 17 Antworten / Flachansicht Nickles

Hallo, ich möchte auf eine in C geschriebene DLL mittles Java zugreifen. Also die DLL ist -wie gesagt - schon vorhanden; ich will lediglich sie in meinem Java-Programm einbinden, damit ich bestimmte Funktionen aufrufen kann. Ich habe Java Native Interface angeschaut und kann eigene DLL erstellen, die ich dann in Java-Programmen einbinden kann(mit System.loadLibrary). Aber was ist, wenn die DLL schon existiert!?


Konkret: ich habe FRME_GRABBER.DLL (in C geschrieben) und will sie im JAVA-Programm benutzen. z.B. möchte die Funktion long Grab(long fgh, FRAME *frh), was schon in dieser FRAME_GRABBER.DLL implementiert ist, in meinem JAVA-Programm benutzen.

bei Antwort benachrichtigen
vergisses mr.escape „Auf existierende DLL (in C geschrieben) mittels JAVA zugreifen!“
Optionen

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).

bei Antwort benachrichtigen
Danke viel mals! DeepThinking
Danke viel mals! vergisses