Erhebliche Probleme mit JNA (dll Aufruf)

Christian Zerbes

Grünschnabel
Hallo zusammen, wir haben heir ernste Probleme, eine dll Datei aus Java heraus auszurufen. Folgende Ausgangssituation (bzw. das Ziel des Ganzen):

Wir haben eine dll, die das Gewicht einer Waage ausliest, diesen Wert wollen wir in unser Java-Programm reinbekommen.

Jetzt war der Versuch, das ganze mittels JNA umzusetzen, also einfach die Methoden der dll (die uns komplett bekannt sind) aufzurufen. Zuerst habe ich versucht, wie in den zahlreichen Tutorials im Netz die Methoden der user32.dll und kernel32.dll aufzurufen, die im system32 Ordner liegen. Hat wunderbar funktioniert.

Dann wollten wir natürlich unsere eigene (bzw. vorhandene) dll aufrufen. Dabei handelt es sich um eine aus C-Dateien generierte dll (wir haben sogar den Quellcode zu den Dateien, aber wir haben heir kein C-Knowhow, deswegen können wir damit nicht viel anfangen. Die dll die wir haben, haben wir ebenfalls zugeschickt bekommen). Das Ganze dann analog aufgebaut. Beim Aufruf der Native.loadLibrary()-Methode bekommen wir folgenden Fehler (ADDI_REG ist der Name unserer dll):

Code:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'ADDI_REG': Das angegebene Modul wurde nicht gefunden.

Folgende Orte für die dll wurden bereits ausprobiert:

- system32 Ordner
- C:\lib Ordner mit -Djava.library.path=C:\lib und/oder -Djna.library.path=C:\lib
- Ordner der exportieren .jar Datei
- auch zahlreiche Neustarts halfen nichts

Also einen Schritt zurückgegangen und nach folgender Anleitung eine eigene (C++) dll erstellt. Wieder eingebunden, gibt den gleichen Fehler.

Wir haben mal beide dlls mit DependencyWalker angeschaut, und bei beiden fehlen wohl ein paar Abhängigkeiten:

- MathFunctionsDll (aus dem msdn Tutorial): MSVCP80D.DLL (zwei mal...)
- ADDI_REG (unsere): ADDI_INT.DLL, ADDIKERN.DLL, MSVCRT20.DLL, IESHMIS.DLL

Weiss nicht, wie relevant das ist, v.a. weil bei dieser nach Tutorial generierten dll auch einiges fehlt...

Wir sind jetzt hier schon mit 3 Mann einen ganzen Tag am Suchen nach einer Lösung, ganz Google leergesucht, alles probiert, die Nerven liegen blank, weil niemand weiter weiß.


Nochmal kurz zu den Hard-/Softwareangaben:

- Win7 x64
- Java 1.6 x64
- Jars auch auf x86 Rechner mit x86 Java ausprobiert


Falls noch weitere Infos von Nöten sind, bitte nachfragen, auf jeden Fall brauchen wir Hilfe, weil wir am verzweifeln sind.

Vielen Dank.
 
Hi und Willkommen bei tutorials.de :)

Die MathFunctions-DLL habt ihr also nur zum Testen von JNA erstellt, hab ich das richtig verstanden?
Zu dem Fehler kann ich euch ganz genau sagen, was falsch ist: Vor dem Kompilieren vom C-Code das Projekt von Debug auf Release umstellen.
Std.-mäßig ist es am Anfang auf Debug eingestellt, das ist zum Fehlersuchen gut, braucht aber einen C-Compiler (bzw. seine Debuglibs) am Rechner. Release ist dann das "richtige", fertige.

Zu den Abhängigkeiten von ADDI_RES: Habt ihr diese Dateien?
 
Vielen Dank für deine Antwort, hat uns sehr weitergeholfen.

Das mit dem Debug/Release haben wir dann geändert, ausserdem haben wir festegestellt (mit DependencyWalker), dass die Funkitonen in der DLL nicht genauso wie in der Headerdatei heissen (? am Anfang, @ zwischen Funktion/Klasse/Namespace), das haben wir mit einem FunctionMapping aufgelöst.

Bei der ADDI_REG dll fehlen tatsächlich andere DLLs bzw. es ist sogar die falsche. Wir haben zusätzlich versucht, aus den C-Dateien selber eine DLL zu kompilieren, das hat wegen fehlender Headerdateien nicht funktioniert, was aber nicht unser Problem ist. Wir fordern die fehlenden Dateien dann einfach vom Kunden, sonst läuft eh nichts.

Auf jeden Fall sind wir jetzt schon einen Schritt weiter und wissen, wie und v.a. dass das Ganze funktioniert. Falls ich weitere Probleme habe, melde ich mich nochmal. Vielen Dank nochmal :)
 
Zurück