Funktionen einer dll aufrufen

Status
Nicht offen für weitere Antworten.

Calamitous

Bekanntes Mitglied
hallo!
Bin noch etwas neu in Java... (vielleicht ist die Frage doof, weil es entweder leicht oder gar nicht geht ;)
aber weiß jemand wie ich eine Funktion (einer dll) aufrufen kann?
danke schon mal für ideen/ lösungen
 

René Link

Aktives Mitglied
Hi,

kennst du dich mit JNI (Java Native Interface) aus.
Mit JNI kannst du C-Code aus Java aufrufen. Was du nicht kannst ist eine
Funktion einer DLL aufrufen, die nicht für JNI kompiliert wurde. Aber du
kannst eine Indirektionsstufe einführen, indem du eine Funktion in einer
C-Datei schreibst, diese dann für JNI kompilierst und dann rufst du deine
Funktion auf. Diese mapped dann den Aufruf auf die eigentliche DLL.

JNI funktioniert folgendermaßen:
native3.gif


Hier eine Java-Klasse die JNI benutzt.

Code:
public class JavaNativeInterfaceTest {

  public static native void printSomething();

  public static void main(String[] args) {
    System.loadLibrary("JNI");                // meine DLL trägt den Namen JNI.dll
    JavaNativeInterfaceTest.printSomething();
  }
}

Und das ist die erzeugte c-header-Datei von javah
Code:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class JavaNativeInterfaceTest */

#ifndef _Included_JavaNativeInterfaceTest
#define _Included_JavaNativeInterfaceTest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     JavaNativeInterfaceTest
 * Method:    printSomething
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_JavaNativeInterfaceTest_printSomething
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif


Hier noch der c-Code
Code:
#include <stdio.h>
#include <JavaNativeInterfaceTest.h>

JNIEXPORT void JNICALL Java_JavaNativeInterfaceTest_printSomething(JNIEnv *, jclass){
	printf("Something");
}


Wenn du die DLL erzeugt hast, muss sich diese unter Windows in einem Verzeichnis befinden, welches in der
PATH-Umgebungsvariablen angegeben ist. Wenn du mehr Informationen brauchst, wie zum Beispiel das Übergeben
von Argumenten und das Zurückgeben von Rückgabewerten funktioniert, solltest du dich auf der Sun Seite umsehen.
http://java.sun.com/docs/books/tutorial/native1.1/
 

René Link

Aktives Mitglied
Hi,

die Variante von Excelsior Store benutzt aber auch die Java Native Interface ( ohne die gehts nicht ).
Das sieht man auch daran, dass die auch eine dll mitliefern. Den einzigen Unterschied denn ich sehe ist, dass
Excelsior Store eine adaptive Variante implementiert hat und somit den Umstand behebt, für jede benötigte
Funktion ein Mapping einzuführen. Allerdings kostet die Variante von Excelsior Store auch je nach Lizenz zwischen
$50 und $500. Deshalb würde ich die paar Funktionen, welche wirklich unausweichlich benötigt werden, selbst mappen. Das kostet mich nichts außer 1-2 Stunden arbeit. In Außnahmefällen ist es wohl gerechtfertigt auf
soetwas wie xFunction zurückzugreifen. Allerdings sollte man sich im klaren darüber sein, dass man mit jeder
Nutzung von JNI die Plattformunabhängigkeit aufgibt um den Preis für jede unterstützte Plattform eine Lib liefern
zu müssen. JNI macht für mich nur Sinn, wenn es auf der Server Seite eingesetzt wird. Die Clients bleiben
Plattformunabhängig, während man auf dem Server JNI benutzt. Ändert man etwas muss man nur für den
Server eine neue Lib kompilieren. Ein anderen Sinn sehe ich darin ( und das wird auch die Intension von Sun gewesen sein ),
dass ich mit Hilfe der JNI meine bereits bestehenden Libs ( die mich wahrscheinlich schon Tage und Nächte gekostet haben sie zu erstellen und die Bugs zu beseitigen ), weiter verwenden kann ohne eine Neuimplementierung in Java
vornehmen zu müssen die mich wieder Tage und Nächte kostet.
Man sollte sich immer vor Augen halten was und wofür man etwas braucht und dann das Werkzug auswählen.
Auf gut deutsch meine ich, dass man nicht verzweifelt versuchen sollte mit einem Stein einen Nagel krumm und schief in die Wand zu hauen, nur weil man nicht weiß was ein Hammer ist oder wie er funktioniert. :wink:
Also ... die Aufgabe bestimmt das Werkzeug nicht umgekehrt.
Jetzt bin ich zwar ein wenig vom eigentlichen Thema abgekommen, aber das wollte ich schon immer mal sagen. :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T JNA, Aufruf der Funktionen einer dll Allgemeine Java-Themen 5
B Sent and Receive Funktionen zwischen Objekten ermöglichen? Allgemeine Java-Themen 8
Robertop Funktionen miteinander verketten Allgemeine Java-Themen 5
D Methoden Methoden anpassen und fehlende Funktionen hinzufügen Allgemeine Java-Themen 475
Neumi5694 Parser - Zerlegen verschachtelter Funktionen Allgemeine Java-Themen 2
A lineare funktionen und winkel Allgemeine Java-Themen 4
M JMuPDF Funktionen Allgemeine Java-Themen 0
S Funktionen von jre7 fehlen in jre8 Allgemeine Java-Themen 2
Tarrew RMI Java RMI - com.sun.proxy.$Proxy1 cannot be cast to Funktionen Allgemeine Java-Themen 0
A Funktionen aufrufen nach Schema x Allgemeine Java-Themen 2
C Benutzereingabe von EXCEL-Funktionen parsen Allgemeine Java-Themen 4
D Annotationen oder anonyme Funktionen? Allgemeine Java-Themen 0
N Algorithmus zum bewerten von mathematischen Funktionen Allgemeine Java-Themen 11
K Eclipse Mathematische Funktionen Allgemeine Java-Themen 8
T Parallelisierung zweier BigInteger-Funktionen Allgemeine Java-Themen 6
S Programmfehler bei grundlegenden Funktionen Allgemeine Java-Themen 6
ruutaiokwu threads bei klassen mit stat. funktionen... Allgemeine Java-Themen 2
S Profiler-Funktionen in eigener Applikation nutzen..? Allgemeine Java-Themen 5
X Quellcode von nativen Funktionen Allgemeine Java-Themen 2
J Zugriff auf gemeinsame Funktionen Allgemeine Java-Themen 4
B webservice stub enthält nicht genug funktionen Allgemeine Java-Themen 2
M Schnelle Scriptsprache für einfache Funktionen? Allgemeine Java-Themen 5
D Kompakte Syntax für Funktionen Allgemeine Java-Themen 7
D Parser-generator für mathematische Funktionen Allgemeine Java-Themen 12
R Problem mit Trigonometrischen Funktionen Allgemeine Java-Themen 16
N forschleife durchläuft funktionen Allgemeine Java-Themen 7
S reelle Funktionen Formel Allgemeine Java-Themen 13
A Funktionen werden im Jar-File nicht ausgeführt Allgemeine Java-Themen 6
M GUI ähnliche Elemt. und Funktionen im Browser - Technologie? Allgemeine Java-Themen 8
H Programmerweiterung durch Datei die Funktionen enthält Allgemeine Java-Themen 5
M Verkettung von 2 Funktionen? Allgemeine Java-Themen 4
A in patterns funktionen aufrufen Allgemeine Java-Themen 3
märliprinz Sortieren und Filtern von Funktionen/Methoden Allgemeine Java-Themen 4
F Aus Java heraus WinAPI Funktionen benutzen Allgemeine Java-Themen 7
W Problem mit sin- und cos-Funktionen Allgemeine Java-Themen 2
S Auf statische Funktionen mit Java Reflections zugreifen Allgemeine Java-Themen 3
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
I Vom Monolith zu Services in einer Webseite Allgemeine Java-Themen 1
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
S HTML einer Webseite 1:1 so bekommen wie es auch der Browser anzeigt? Allgemeine Java-Themen 14
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
D Abbruch einer ViewScoped Bean in Arbeit Allgemeine Java-Themen 2
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
Lukas2904 Wie kann man cps (ClicksPerSecond) in einer GUI anzeigen lassen? Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
N BlueJ Implementation einer Analoguhr Allgemeine Java-Themen 0
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J JSON Daten von einer Webseite erhalten Allgemeine Java-Themen 2
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
J Zerlegen einer Zahl Allgemeine Java-Themen 6
Zrebna Wie kann man endgültig aus einer Rekursion ausbrechen? Allgemeine Java-Themen 14
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
Meeresgott Effizientester Weg um nach der Value einer verschachtelten Map aufzulösen Allgemeine Java-Themen 5
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
MiMa Prüfziffer einer EAN Nummer berechnen Allgemeine Java-Themen 4
MiMa Erstellungsdatum einer Datei Allgemeine Java-Themen 10
Drachenbauer Wie kann ich einer existierenden Enum von außerhalb veränderte Werte zuweisen? Allgemeine Java-Themen 5
S HTML den ich von einer URL hole nicht identisch mit dem HTML im Browser Allgemeine Java-Themen 1
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8
M Hilfe bei einer Java Programmieraufgabe! Ab morgen Montag um 08:00 Uhr Allgemeine Java-Themen 5
J Algorithmen Analyse einer Schleife Allgemeine Java-Themen 6
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
A Mithilfe von einer Nummer einen Namen finden n-Beziehung Allgemeine Java-Themen 8
Scream_ilias Auf einer Website die anmeldedaten eingeben Allgemeine Java-Themen 9
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
I Lohnt sich heutzutage der Aufwand einer Portierung für MacOS Allgemeine Java-Themen 8
J Suchen von einer Scannereingabe in einem HashSet Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35

Ähnliche Java Themen

Neue Themen


Oben