Autor Beitrag
peeage
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Do 09.09.10 11:34 
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?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 09.09.10 12:03 
Guck mal hier: www.michael-puff.de/...kel/HelloWorld.shtml da habe ich auch mal was mit JNI gemacht. Eventuell hilft es.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1338
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
peeage Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1338
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?