JNA, Aufruf der Funktionen einer dll

tanechka

Bekanntes Mitglied
Hallo zusammen,

ich brauche Hilfe bei dem Einbinden einer .dll. Beim Testen kriege ich eine Fehlermeldung:
"%1ist keine zulässige Win32 Anwendung"

Bis jetzt meine Schritte, eine Erweiterung in der .pom(Maven):
Code:
        <dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna-platform</artifactId>
    <version>5.6.0</version>
    </dependency>

Ein Interface:
Code:
public interface ICav extends Library {    
 
    public static final ICav INSTANCE = (ICav ) Native.load("cav", ICav.class);
    String print();

}
Ein Wrapper:
Code:
public class CavWrapper {  

    static {
        addLibraryPath();
    }

    public static void addLibraryPath() {
        System.setProperty("jna.library.path", System.getProperty ("java.library.path"));
        System.out.println(System.getProperty("jna.library.path"));

        NativeLibrary.addSearchPath("cav", "D:\\");
    }
    
    public String print() {
        String result= ICav.INSTANCE.print();
        return result;
        
    }
Die .dll ist x32bit. Meine installierte Java:
Code:
>java -version
Picked up JAVA_TOOL_OPTIONS: -Djava.vendor='Sun Microsystems Inc.'
openjdk version "11.0.18" 2023-01-17 LTS
OpenJDK Runtime Environment Zulu11.62+18-SA (build 11.0.18+10-LTS)
OpenJDK 64-Bit Server VM Zulu11.62+18-SA (build 11.0.18+10-LTS, mixed mode)
Ich bitte um eure Hilfe.
 

KonradN

Super-Moderator
Mitarbeiter
Du nutzt ein 64 Bit Java, dann kannst du keine 32 Bit DLL ansprechen. Nutze ein 32 Bit Java und es könnte dann gehen.

Das ist zumindest mein Verständnis hiervon.
 

KonradN

Super-Moderator
Mitarbeiter
Nach meinem Verständnis nicht. Es ist ja etwas wie zwei Systeme. Du hast das 64 Bit Windows System und dann hast Du das "Windows on Windows 64Bit" (WoW64) Subsystem, in dem 32 Bit Anwendungen ausgeführt werden können. Da gibt es keine direkte Interaktion von einem Prozess zur DLL.

Es gibt aber natürlich die Möglichkeit, dass man das in eigene Prozesse packt um dann zwischen den Prozessen zu kommunizieren. So gibt es unter Windows die COM Server. Diese unterstützen sowohl In-Process als auch out-of-process vorgehen und hier wäre dann out-of-process das notwendige Vorgehen. Ist aber schon viel zu lange her, dass ich mich mit sowas beschäftigt habe. Und meine Erfahrung war halt zu reinen 32 Bit Zeiten, so dass ich hier lediglich altes Wissen auf die 32/64 Bit Thematik adaptiere.

COM Clients and Servers - Win32 apps | Microsoft Learn

Das ist aber dann etwas, das man erst einmal bauen müsste. Und dann braucht man den Zugriff. Das geht dann nicht mehr einfach mit JNA sondern man braucht da etwas mehr. Dazu kann man sich mal dieses GitHub Projekt ansehen, das aufzeigt, wie man da einen Proxy zu einem COM Server bauen könnte: kohsuke/jinterop-proxy: Type-safe proxy for J-Interop (github.com)

Das wäre eine Lösung, wie sie unter Windows mit COM/DCOM damals üblich war. Aber das ist ural Technologie! Heutzutage werden Windows Entwickler vermutlich auch eher einen .Net Ansatz fahren. Und ein Java Entwickler könnte zur Not eine kleine 32Bit Java Anwendung bauen, die die Zugriffe auf die DLL Kapselt und die dann vom anderen Java Prozess aufgerufen wird.
Aber noch einmal: Die einfache Lösung ist, auf ein 32 Bit Java zu wechseln. Start die Anwendung mit einem 32 Bit Java und es sollte funktionieren. Da es eine einfache Lösung gibt, sehe ich gerade keinen Sinn, irgend etwas überkompliziertes zu bauen. Und wenn man da was bauen müsste als Java Entwickler, dann baut man etwas mit einem 32Bit Java um das zu kapseln um da dann irgendwie drauf zuzugreifen (RMI oder man greift gar zu einem REST Service? Wird dann aber recht umfangreich und wirkt massiv wie Overkill...)
 

Neumi5694

Top Contributor
Als kleine Info: Ich stand bei meinem Projekt vor einem ähnlichen Problem. Zwei Versionen meiner Software, eine ältere in 32 Bit und die aktuelle in 64 Bit sollten den selben Service ansprechen. Die Lösung war, die Wrapper DLL einmal in 32 und einmal in 64 Bit bereitzustellen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
berserkerdq2 Wie mache ich den rekursiven Aufruf in IJVM Allgemeine Java-Themen 3
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
R JDK installieren OpenJDK-Aufruf sehr langsam Allgemeine Java-Themen 4
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
P CMD Aufruf mit Admin-Rechte Allgemeine Java-Themen 2
cool_brivk24 Klassen Klassen Aufruf Fehlgeschlagen Allgemeine Java-Themen 14
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
J Genson - zirkulärer Aufruf Allgemeine Java-Themen 1
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
B Kodierung von String -> URL aufruf Allgemeine Java-Themen 2
G Rekursiver Aufruf von Waagengewichten Allgemeine Java-Themen 2
H Klassennamen zum Aufruf eines statischen Feldes aus Variable holen Allgemeine Java-Themen 4
M datei aufruf prüfen Allgemeine Java-Themen 9
D JNI DLL Aufruf Allgemeine Java-Themen 32
M datei aufruf datum auslesen Allgemeine Java-Themen 5
A Java Verhalten bei parallelem Aufruf derselben Methode?? Allgemeine Java-Themen 2
F Parameter im Link /jar-Aufruf Allgemeine Java-Themen 12
Z Socket Aufruf einer Klasse in einer anderen Klasse Allgemeine Java-Themen 6
A JNI: Unerklärlicher Crash beim Aufruf von CallVoidMethod Allgemeine Java-Themen 9
S Variablen bei Aufruf zurücksetzen Allgemeine Java-Themen 4
J yield() Aufruf in einer synchronized-Methode Allgemeine Java-Themen 13
R JAR aus Batchdatei Aufruf Allgemeine Java-Themen 4
Kr0e Sichtbarkeitsregeln nach Executor-Aufruf Allgemeine Java-Themen 5
F rekursiver Aufruf (Sudoku und Guice) Allgemeine Java-Themen 19
B Cipher.getInstance Aufruf sehr langsam Allgemeine Java-Themen 2
M Aufruf von Unix-Shell in Java Allgemeine Java-Themen 5
G Aufruf einer Methode in IStatus exex Allgemeine Java-Themen 4
E Seltsamer aufruf von java.util.Date.toString() Allgemeine Java-Themen 3
C Netbeans - Aufruf-Reihenfolge Allgemeine Java-Themen 5
Nicer Problem mit Link aufruf Allgemeine Java-Themen 6
M Cobol-Aufruf aus Java Allgemeine Java-Themen 6
C Aufruf einer Methode einer anderen Klasse Allgemeine Java-Themen 14
T Lib/Framework zum Automatischen Aufruf von Methoden Allgemeine Java-Themen 2
R Ableiten - Methoden aufruf bei abgeleiteten Klassen Allgemeine Java-Themen 4
G DAOFactorry aufruf Allgemeine Java-Themen 10
G Aufruf einer Methode wenn Klasse noch nicht existiert Allgemeine Java-Themen 3
V Aufruf von Klasse mit Runnable versteh ich nicht Allgemeine Java-Themen 8
S Übergabe / Aufruf einer beliebigen Methode in einer anderen Allgemeine Java-Themen 9
R toString() methode überschreiben mit rekursivem aufruf. Allgemeine Java-Themen 8
N Main-Klasse wird beim Aufruf des JARs nicht gefunden Allgemeine Java-Themen 8
D Problem bei Aufruf einer Funktion Allgemeine Java-Themen 3
B Null Pointer Exception bei Canvas-objekt-Aufruf Allgemeine Java-Themen 12
S Aufruf in Konsole mit beliebig vielen Argumenten? Allgemeine Java-Themen 18
reibi Aufruf eines private Konstruktors Allgemeine Java-Themen 7
M Rekrusiver Aufruf ? Allgemeine Java-Themen 6
D aufruf beim kopieren Allgemeine Java-Themen 11
J einfachster Servlet-Aufruf klappt nicht Allgemeine Java-Themen 3
J Konstruktor-Aufruf nur aus einem bestimmten Package erlauben Allgemeine Java-Themen 5
S problem mit externen aufruf Allgemeine Java-Themen 4
M [Windows] Aufruf von Java mit Sonderzeichen im Classpath Allgemeine Java-Themen 5
D VM crash nach Aufruf von GetFieldID und GetMethodID in JNI Allgemeine Java-Themen 31
G PDF AUfruf Allgemeine Java-Themen 6
S Aufruf meines Programms Allgemeine Java-Themen 2
U zweifacher Aufruf animiertes gif Allgemeine Java-Themen 7
G Konstruktor-Aufruf nun mit oder ohne Typ? Allgemeine Java-Themen 9
T CMD nach aufruf von javaw Programmname wieder schließen Allgemeine Java-Themen 3
Z Problem beim Aufruf eines Listener? Allgemeine Java-Themen 4
A Problem beim Aufruf von javac Allgemeine Java-Themen 7
W Aufruf von JavaBeans Allgemeine Java-Themen 3
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
C Funktionen einer dll aufrufen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben