Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - JNI Callback Problem
peeage - Do 09.09.10 11:34
Titel: JNI Callback Problem
Hallo zusammen,
ich habe eine JNI- DLL gebastelt, welche durch meine Java- Anwendung geladen wird. Diese DLL soll Telefonieereignisse über die Windows- TAPI bereitstellen. Innerhalb der DLL wird mit dem TAPI- Server kommuniziert. Die DLL übergibt dem TAPI- Server eine Callback- Prozedur (aus der DLL), welche vom TAPI- Server immer dann aufgerufen wird wenn ein Telefonieevent eintritt. Diese Callback- Prozedur wird nie aufgerufen, sobald die JNI- DLL von meiner Java- Anwendung geladen wird. Lade ich die DLL über eine eigene Win32- Anwendung, dann wird die Callback- Prozedur ordnungsgemäß vom TAPI- Server aufgerufen.
Ich bin langsam am verzweifeln. Hat einer 'ne Ahnung warum diese Callback- Prozedur nie aufgerufen wird, sobald meine DLL über Java geladen wird?
Sinspin - Do 09.09.10 12:03
Das ist bei mir zwar schon verdammt lange her, ich weis also nicht ob das vorgehen immernoch das gleiche ist, aber ich versuch es einfach mal.
Um eine JNI Dll zu erstellen musst du ja als erstes die Javaseite spezifizieren und die Namen der Funktionen und deren Parameter festlegen.
Wikipedia sagt:
| Zitat: |
| Um aus Java eine native Methode aufzurufen, muss diese zunächst als native deklariert werden. |
Als weiteren Schritt musste das ganze durch einen Schnittstellen Generator gejagt werden.
Wikipedia sagt:
| Zitat: |
| Das Javaprogramm wird übersetzt und anschließend mit dem Softwarewerkzeug javah eine Headerdatei erstellt |
Raus kommt eine C Headerdatei mit der du dann weiterarbeiten kannst. Des weiteren benötigst du noch die Headerdatei für die Deklaration der von Java zur Verfügung gestellten Datentypen innerhalb von C.
Schau mal nach JNA das scheint eine alternative Methode zu sein mit der man den JNI Kram nicht braucht.
peeage - Do 09.09.10 12:18
Also der Aufruf der JNI- Methoden in der DLL (von Java aus) funktioniert wunderbar. Es hängt wirklich nur daran, dass eine nicht- JNI- Methode (die besagte Callback- Prozedur) von einer weiteren DLL (welche von der JNI- DLL geladen wird / TAPI- Server) nicht aufgerufen werden kann.
Sinspin - Do 09.09.10 13:00
Tschuldigung :oops: ich habe nicht richtig gelesen.
Damit ich das richtig verstehe, die TAPI Schnittstelle ruft eine Procedure in deiner Dll auf, bzw. soll es. Und das klappt nur wenn du deine Dll ohne Java testest?
Ich denke mal, die Intialisierung der Dll ist in beiden Fällen gleich. Also auch das Registrieren des Callbacks bei der TAPI dll.
Versuch es doch mal mit der JNA Schnittstelle da brauchst du den ganzen JNI kram nicht. Vieleicht ist es der auch der einen vernünftigen Zugriff die Dll verhindert.
Ich hatte damals eine Matrox Videoverarbeitungskarte via JNI angebunden, das ging eigentlich ganz gut.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!