DLL mit Java HILFE

Status
Nicht offen für weitere Antworten.

Viki

Mitglied
Hallo,
ich bin ein Anfäger was java angeht.

Meine Frage bezieht sich auf dll.

Ich sollte dll in Javacode einbiden. Ich habe gelesen, dass man zuerst mal ein c/c++ Code schreiben muss(kann kein c) dann header datei erzeugen muss,... bis zur Erstellung der dll, dann die dll einbinden.

Ich habe aber eine dll bekommen mit Bemerkung, dass in dieser dll eine Funktion ist die 3 Werte erwartet, und ein zurückgibt.

Also dachte ich, wenn ich schon eine fertige dll habe binde ich sie eben mit JNI ein.

class Jni_Test {
public native int JNI(int a, int b, int c);

static {
try {
System.loadLibrary("diedll");
} catch (UnsatisfiedLinkError e) {
System.err.println("Library not found" + e);
}
}

public static void main(String[] args) {
int erg = 0;
Jni_Test test = new Jni_Test();
erg = test.JNI(1,2,3);
System.out.print(erg);
}
}

Doch es passiert nichts ausser der folgender Fehlermeldung:

Exception in thread "main" java.lang.UnsatisfiedLinkError: JNI
at Jni_Test.JNI(Native Method)
at Jni_Test.main(Jni_Test.java:17)

Also wie ich schon erwähnt habe bin :cry: :cry: :cry: totaler Anfänger und ich hoffe mir kann geholfen werden.

Gruss
Viki
 
Also da deine dll scheinbar geladen wird (wobei mich das etwas wundert, es denn du hast die Datei echt als "diedll.dll" auf deinem rechner abgelegt), aber egal bist dusich das es die entsprechende Methode mit einer passenden Signatur gibt.
 
ach moment ich hab nicht gelesen wo deine DLL herkommt!!!

Die dll muss natürlich auch eine entsprechende JNI Schnittstelle definieren. Das ist bei dir mit großer Wahrscheinlichkeit nicht der Fall wenn du sie so fertig bekommen hast. Oder war sich vorher schon als JNI dll im Einsatz?!?
 
Viki hat gesagt.:
Hallo DocRandom,

leider hilft mir es nicht, also bin wieder mal auf dem 0 Punkt

Gruss
Viki
also lt. Inselbuch müsste Diene Klasse eher so aussehen:
Code:
package viki;

public class JNI_Test {
	
	static {
		System.loadLibrary("diedll");
	}
	public static native int diedll( int a, int b, int c);
}
..also zuerst die DLL laden und dann die Methode dazu anmelden.

Jedoch hab ich wie gesagt mit JNI noch nix gemacht!

mfg
DocRandom
 
Hallo,

also die DLL laden und dann die Methode anmelden oder anders rum, ist soweit ich gelesen habe egal.

ich denke das Problem ist, dass die dll keine entsprechende JNI Schnittstelle besitzt.

Meines Wissens wurde die dll nur von eine 'c exe' verwendet. Also kann ich vergessen mit Java an die Funktion ranzukommen die dll besitzt 🙁 .

Ich stell mal eine dumme Frage: kann ich dann mit c an die dll ran?

Gruss
Viki
 
Ich stell mal eine dumme Frage: kann ich dann mit c an die dll ran?
..nein!
Du müsstest diese decompelieren, jedoch ist das Endprodukt kaum lesbar!
Wäre besser Du versuchst an den Source-Code ran zu kommen.
Wenn das nicht geht, dann evtl. eine eigene Library schreiben, wobei sich wiederum die Frage erhebt, ob man/frau das nicht anders lösen kann!

mfg
DocRandom
 
Ok das erklärts. Es gibt jetzt 2 Möglichkeiten:

1) Du verzichtest auf deine JNI calls und schreibst dir ein C/C++ Programm. Dann hast du für dieses Problem nichts mehr mit Java am Hut.

2) Du baust dir eine Wrapper dll. Das bedeutetdu machst dir eine Schnittstelle die zwischen Java und deiner dll vermittelt. Das bedeutet du raufst aus Java via JNI deine noch zu erstellende Wrapper DLL die JNI fähg ist und diese ruft dann deine vorhandene dll auf.
 
Viki hat gesagt.:
Hallo,

Ich stell mal eine dumme Frage: kann ich dann mit c an die dll ran?


Ich weiß jetzt nitt sogenau was du meinst, aber wenn du mit einem andern c Programm die Methoden deiner dll evrwenden willst, dann geht das auf jeden Fall. Dazu gibt es ja gerade die DLL !!!

Um es etwas zu verdeutlichen, eine dll ist vergleichbar mit einem jar in Java. da wird Funktionaliät in Form einer Library zur Verfügung gestellt, die dann von anderen Programmen genutzt werden kann.
 
Ok danke für eure Hilfe!

ich werde dann versuchen mit c die dll einzubinden um an die Funktionen zu kommen.

Gruss
Viki
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben