btcMoses Geschrieben 2. Juli 2007 Geschrieben 2. Juli 2007 Hallo zusammen, ich möchte eine dll in Java benutzen. Das JNI alleine scheint mir zu einfach gestrickt. Die Quellen vom Buch "Java ist auch eine Insel" sind auch irgendwie unzureichend dokumentiert. Im Prinzip müssen nur 2 Methoden aus der DLL aufgerufen werden. Über ein Event muss das Objekt Rückmeldungen entgegennehmen (Rückmeldungen werden über ein Event-Interface gemeldet). Die Funktionen sind wie folgt deklariert: HRESULT StelleAnfrage( [in] BSTR Anfrage ); HRESULT Konfiguriere( [in] BSTR ParamName, [in] BSTR ParamWert ); Event-Funktion: void BearbeiteAntwort( [in] BSTR strAntwort ); Hat da jemand Erfahrung mit und kann mit helfen, bzw eine gute Anleitung bereitstellen? greetz Zitieren
Mohadipe Geschrieben 2. Juli 2007 Geschrieben 2. Juli 2007 Hi, du bist dir darüber im klaren das du damit ein Grundprinzip von Java aushebelst?!? :old >>> "überall lauffähige Programme" <<< Kannst du die Funktionen nicht in dein Java Programm integrieren? Gruß Moha Zitieren
btcMoses Geschrieben 3. Juli 2007 Autor Geschrieben 3. Juli 2007 Hi, das ist mir schon bekannt! Aber das ist die Anforderung meiner Firma. Die Schnittstelle sieht einfach aus, beinhaltet aber Spezifikationen eines riesen Protokolls im Hintergrund. Glaub mir ich wäre begeisterter den ganzen Schott einfach nachzuprogrammieren Zitieren
bigredeyes Geschrieben 3. Juli 2007 Geschrieben 3. Juli 2007 wir wollen hier eigentlich schon code sehen. mach dir halt erstmal ne hallo-welt-dll und rufe die mittels jni auf. sollte es hierbei zu problemen kommen, bitte code und exception posten. bigredeyes Zitieren
btcMoses Geschrieben 3. Juli 2007 Autor Geschrieben 3. Juli 2007 Kein Problem! Ich habe zunächst eine Klasse, die die Definitionen bereithält: package dll; public class easybpi { static { System.loadLibrary( "easybpi" ); } public static native String StelleAnfrage( String Anfrage ); public static native String Konfiguriere( String ParamName, String ParamWert ); } dann einen Aufruf: package main; public class Main { public static void main(String[] args) { System.out.println("java.library.path : "+ System.getProperty("java.library.path")); dll.easybpi.StelleAnfrage("payment"); } } Exception: java.library.path : Y:\JavaWorkspace\easyBPI\easyBPI Exception in thread "main" java.lang.UnsatisfiedLinkError: StelleAnfrage at dll.easybpi.StelleAnfrage(Native Method) at main.Main.main(Main.java:7) Soweit bin ich bisher gekommen... Leider habe ich keine Möglichkeit selber dlls zu erstellen. Mir stellt sich auch die Frage, wie ich den Typ HRESULT behandeln soll!? vielen Dank für die Hilfe Zitieren
TDM Geschrieben 9. Juli 2007 Geschrieben 9. Juli 2007 Mir stellt sich auch die Frage, wie ich den Typ HRESULT behandeln soll!? java.lang.Long typedef LONG HRESULT; Zitieren
speedi Geschrieben 12. Juli 2007 Geschrieben 12. Juli 2007 DLLs die von JAVA aufgerufen werden müssen JAVA-Konform sein. Deshalb musst du dir zwischen DLLs schreiben. Wenn du nicht unbedingt mit Microsoft-Entwicklungswerkzeugen für die DLLs arbeitest kannst du z.B. mit DevC++ auch Libs für andere Platformen als Windows erstellen indem du einfach nur die Compileroptionen änderst. Ich hab die Erfahrung gemacht das DLLs häufig außerst tricky zu verwenden sind. Wenn du bereits vorhandene DLLs nutzen willst musst du dir blöderweise erst ne Art Zwischen-DLL schreiben. Zitieren
perdian Geschrieben 13. Juli 2007 Geschrieben 13. Juli 2007 ich möchte eine dll in Java benutzen. Das JNI alleine scheint mir zu einfach gestrickt.Was heisst für dich "zu einfach gestrickt"? Machen wir es kurz und knapp: Es gibt in Java keine andere Möglichkeit Funktionalitäten aus einer dll aufzurufen ausser über JNI Aufrufe zu gehen. Vielleicht findest du irgendwo ein Tool, was die Komplexität von JNI wrappt und in irgendeiner Art und Weise vereinfacht, aber JNI ist dein Weg - einen anderen gibt es nicht. du bist dir darüber im klaren das du damit ein Grundprinzip von Java aushebelst?!? [...] "überall lauffähige Programme"Und darum sollte man diesen Weg nicht gehen dürfen? Nur weil Java die Möglichkeit bietet theoretisch auf jeder Plattform zu laufen muss man sich doch da nicht für alle Einsatzbereiche festlegen. Natürlich sind in Java betriebssystemspezifische Aufrufe und Funktionalitäten böse aber manchmal eben einfach nicht zu umgehen. Ich habe zunächst eine Klasse, die die Definitionen bereithält [...] dann einen Aufruf [...] ExceptionMan merkt: Du hast dir weder ein Tutorial noch die Referenz zu JNI angesehen. Solange du das nicht tust wirst du aber niemals erfahren, wie du die Funktionen deiner dll verwenden kannst. Es ist nicht so einfach, wie du es dir hier machen willst - ohne eine eigene Wrapper-DLL, die die entsprechenden Schnittstellen für Java bereitstellt wirst du nicht weiterkommen. Leider habe ich keine Möglichkeit selber dlls zu erstellen.Dann kannst du es direkt komplett sein lassen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.