# dll einbinden



## MatheStein (5. Dez 2009)

hey leute,

wie bindet man eigentlich in java eine dll ein und greift auf dessen funktionen zu (zB kernel32.dll etc der win-api)?


gruß


----------



## SegFault (5. Dez 2009)

Prinzipiell gar nicht, damit würde die Platfromunabhängigkeit von Java Flöten gehen. Du kannst aber über JNI C++ code schreiben der auf die Bibliotheken zugreift und die ergebnise an Java zurück liefert. 
JNI gibts wohl einiges im Netz.


----------



## MatheStein (5. Dez 2009)

vielen dank schonmal  hatte das jetzt gar nicht bedacht..

so gesehen ist es also in reinem java nur möglich funktionen/methoden aus der java-api zu schreiben und sonst keine anderen oder?

gruß


----------



## Gastredner (5. Dez 2009)

Es gibt auch noch JNA, damit kannst du auf native Bibliotheken zugreifen:
Java Native Access ? Wikipedia


----------



## MatheStein (5. Dez 2009)

vielen dank 

ich hab mir mal JNI bei wiki angeguckt Java Native Interface ? Wikipedia und verstehe da leider eine kleinigkeit nicht. 
in dem abschnitt "java ruft native auf" steht unter anderem folgendes geschrieben:

"Das Javaprogramm wird übersetzt und anschließend mit dem Softwarewerkzeug javah eine Headerdatei erstellt, die die Funktionsdeklaration vorgibt. Mit dieser Headerdatei kann dann die native Programmbibliothek erstellt werden."

leider verstehe ich das nicht so ganz. 
java ruft die dll auf und nutzt eine methode aus dieser (die denke ich mal direkt auf dem rechner läuft und nicht auf der jvm).
wofür braucht man dann einen header und welche programmbibliothek wird erstellt? ich nutze in diesem fall doch eine bib und will keine erstellen oder?


gruß


----------



## MatheStein (5. Dez 2009)

ich habs glaub ich schon verstanden.
das ganze beschreibt die einbidung von c code der noch nicht als lib vorliegt.

weiß einer von euch wie man schon vorhandene in C geschriebene libs in Java einbinden kann?

gruß


----------



## Gastredner (5. Dez 2009)

MatheStein hat gesagt.:


> weiß einer von euch wie man schon vorhandene in C geschriebene libs in Java einbinden kann?


Über JNA. 
Alternativ ginge es auch über JNI: Du erstellst eine Java-Klasse, die die von dir benötigten Methoden der nativen Bibliothek über native Methoden enthält - in der C-Implementierung dieser Klasse leitest du die Aufrufe dann an die entsprechenden Bibliotheksfunktionen weiter.
Hast du schon einmal etwas mit C gemacht? Wenn nicht: Lies vielleicht erst ein oder zwei Dinge darüber, besonders über Header- und Source-Dateien. Hilfreich könnte auch der Abschnitt zu JNI in der Insel sein:
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 27 Java Native Interface (JNI)


----------



## MatheStein (5. Dez 2009)

hey

ja kenne mich mehr oder minder mit C aus und deinen ansatz verstehe ich auch, nur was ist wenn ich schon eine fertige .c datei habe und aus meinem java programm auf die funktionen der .c datei zugreifen möchte ohne alle funktionsköpfe etc umzubennenen oder anders:

angenommen ich hab 2 klassen in einem java programm die beide die selbe native methode enthalten. über deinen ansatz würde ich über javah 2 verschiedene header bekommen dessen darin deklarierte funktionen ich implementieren müsste (und das für jeden header einmal), obwohl es eigentlich die selbe funktion ist (also das selbe tun soll). kann man diese redundanz nicht vermeiden?

gruß


----------



## Gastredner (6. Dez 2009)

Wie gesagt: Direkten Zugriff gibt es - womöglich - über JNA. Alternativ gibt es JNI. Mehr nicht.


----------

