Zum Inhalt springen

dll in java - arbeiten mit com-objekten


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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.

Geschrieben
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 [...] Exception
Man 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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...