DLL Befehl Funktionsparameter

TDO88

Bekanntes Mitglied
Hallo Zusammen,

ich möchte die DLL eines Messgerätes nutzen, welches ich hier stehen habe.
Um die einzelnen Funktionen/Methoden der DLL mit ihren Übergabeparametern zu erhalten habe ich den jnaerator benutzt.
In der DLL gibt es die Methode
FPS_Discover (FPS_InterfaceType ifaces, unsigned int *devCount)

FPS_InterfaceType ist ein enum
enum FPS_InterfaceType { IfNone = 0x00, IfUSB = 0x01, IfTcp = 0x02, IfAll = 0x03 }

Jnaerator hat mir die Funktion so übersetzt:
FPS3010DLL.WINCC FPS_discover(FPS_InterfaceType ifaces, IntBuffer devCount);

Und zum Interface Type hat er folgendes erstellt:
Java:
public static class FPS_InterfaceType extends PointerType {
        public FPS_InterfaceType(Pointer address) {
            super(address);
        }
        public FPS_InterfaceType() {
            super();
        }
    };

Jetzt möchte ich die Funktion in meiner Applikation aufrufen, aber bekomme die Parameter nicht zusammen!
Folgender Code dazu:
Java:
int[] devices = new int[10];
IntBuffer devCount = IntBuffer.wrap(devices);
fps3010.FPS3010DLL.FPS_InterfaceType IFType;
FPSInstance.FPS_discover(IFType, devCount);

Der Compiler meckert nun darüber dass IFType evtl. nicht initialisiert wurde! Macht ja auch Sinn, aber wie kann ich die Variable Initialisieren und übergeben?
Hat der Jnaerator da vielleicht auch murks gebaut und die Funktion müsste eigentlich anders aussehen?

Jemand eine Idee?
 

javampir

Bekanntes Mitglied
wenn ich das richtig sehe, ist IFType nie initialisiert wenn du es übergibst. welcher wert müsste es denn sein? der compiler würde nix mehr sagen, wenn du einfach inder zeile darüber bei der deklaration mit = null initialisierst
aber es wird leider nicht ersichtlich, welche daten du übergeben möchtest / müsstest
 

TDO88

Bekanntes Mitglied
Hallo Danke für die Antwort.
Aber Kommando zurück! Das Übersetzen mit dem Jnaerator ist vermutlich schief gelaufen! Ich habe den nochmal drüber über die komplette Header Datei laufen lassen und ein komplett anderes Ergebnis bekommen!
Mit dem neuen Ergebnis gibt es zunächst für den Compiler keine Probleme!
Allerdings klappt das laden der DLL nicht und ich verstehe nicht warum!
Also ich habe eine .java Datei mit
public Interface FPSDLL extends Library{...} mit allen Funktionen der DLL aus dem Jnaerator.
In meiner Applikation steht folgendes:
Java:
public static FPS3010DLL FPSInstance;
public String DLLPath = System.getProperty("user.dir")+"\\fps3010.dll";

try{
     FPSInstance = (FPS3010DLL) Native.loadLibrary(DLLPath, FPS3010DLL.class);
}catch(Exception e){
     JOptionPane.showMessageDialog(FPS3010.this, e.getMessage(), "DLL Load Exception", 0);
}

Die DLL ist im Verzeichnis definitiv vorhanden und wenn ich debugge, steht in DLLPath auch der richtige Pfad drin!
Als Debug Output bekomme ich:
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Unable to load library 'C:\Users\...\Documents\NetBeansProjects\FPS3010\fps3010.dll': Native library (win32-x86-64/C:\Users\...\Documents\NetBeansProjects\FPS3010\fps3010.dll) not found in resource path ([file:/C:/Users/.../Documents/NetBeansProjects/FPS3010/lib/jna-4.1.0.jar, file:/C:/Users/.../Documents/NetBeansProjects/FPS3010/build/classes/])

In der Variable DLLPath steht folgendes: C:\Users\...\Documents\NetBeansProjects\FPS3010\fps3010.dll

Ist das ein 32/64 Bit Problem oder so?

Jemand eine Idee?
 

TDO88

Bekanntes Mitglied
Habe es nochmal so versucht:
Java:
public interface FPS3010DLL extends Library {
    public static final String JNA_LIBRARY_NAME = LibraryExtractor.getLibraryPath((System.getProperty("user.dir") + "\\fps3010.dll"), true, FPS3010DLL.class);
    public static final NativeLibrary JNA_NATIVE_LIB = NativeLibrary.getInstance(FPS3010DLL.JNA_LIBRARY_NAME, MangledFunctionMapper.DEFAULT_OPTIONS);
    public static final FPS3010DLL FPSINSTANCE = (FPS3010DLL)Native.loadLibrary(FPS3010DLL.JNA_LIBRARY_NAME, FPS3010DLL.class, MangledFunctionMapper.DEFAULT_OPTIONS);
...
}

Damit bekomme ich folgende Meldung:
ERROR: Failed to extract library C:\Users\...\Documents\NetBeansProjects\FPS3010\fps3010.dll
java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 7
(?i)C:\Users\...\Documents\NetBeansProjects\FPS3010\fps3010.dll[^A-Za-z_].*


Ist die DLL vielleicht fehlerhaft oder nicht für Java entwickelt?!

Wäre wirklich für jede Hilfe dankbar!
 

Tom299

Bekanntes Mitglied
Wie hast du denn das Tool zum laufen gebracht? Ich hab zuerst ein git clone gemacht und mvn clean install, aber da kommt gleich ne Fehlermeldung mit parent pom igendwas ...

Hab das Tool dann runtergeladen und java -jar jnaerator.jar usw. versucht, aber der will immer noch eine Header-Datei haben. Wo soll man die denn hernehmen? Man hat doch immer nur die DLLs aufm Rechner.
Kannst du mir da nen Tip geben oder deine Kommando sagen, mit dem du generierst?
 

TDO88

Bekanntes Mitglied
Wie hast du denn das Tool zum laufen gebracht? Ich hab zuerst ein git clone gemacht und mvn clean install, aber da kommt gleich ne Fehlermeldung mit parent pom igendwas ...

Hab das Tool dann runtergeladen und java -jar jnaerator.jar usw. versucht, aber der will immer noch eine Header-Datei haben. Wo soll man die denn hernehmen? Man hat doch immer nur die DLLs aufm Rechner.
Kannst du mir da nen Tip geben oder deine Kommando sagen, mit dem du generierst?

Ich hatte in diesem Fall glücklicherweise die Header-Datei der DLL!

Zum Problem: Ich habe nochmal mit dem Hersteller des Messgerätes telefoniert und er hat mir eine 64 Bit Version der DLL zukommen lassen und siehe da... es funktioniert! Also war es ein 32/64 Bit Problem
 

Tom299

Bekanntes Mitglied
Ich hab da auch was übersehen, dachte das Tool kann alle DLLs bedienen, aber da steht ja nur was von c,c++ und objective c ... ich hatte mit einer .net dll was versucht :mad:

Ob es so ein Tool auch für .net DLLs und alte VB6 DLLs gibt?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
J CMD Befehl in Java Consolenprogramm ausführen Allgemeine Java-Themen 6
T Konsolen-Befehl junk Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
F SQLite mit Java / Probleme beim INSERT Befehl Allgemeine Java-Themen 4
F Create Befehl mit variierender Spaltenanzahl/Spaltenname Allgemeine Java-Themen 5
E String in Zahl umwandeln, ohne Befehl Integer.parseInt Allgemeine Java-Themen 3
D Klassenübergreifender Befehl geht nicht Allgemeine Java-Themen 10
H FTP Befehl/Java Methode für Submit im z/Os (Host) Allgemeine Java-Themen 1
B Zeitmessen Befehl sende und empfagen Allgemeine Java-Themen 10
G Befehl funktioniert in Eclipse allerdings nicht in einer Jar-Datei Allgemeine Java-Themen 3
J java zurück befehl Allgemeine Java-Themen 18
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
M Befehl in Runtime ausführen der Eingabe benötigt Allgemeine Java-Themen 3
T Java Programm als Batch Befehl Allgemeine Java-Themen 6
K der Befehl "runas" Allgemeine Java-Themen 13
Jats Programm mit CMD Befehl hängt sich auf oder gibt error = 5 aus Allgemeine Java-Themen 4
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
D befehl auf mehrere objekte anwenden Allgemeine Java-Themen 7
S Shell-Befehl: mail Allgemeine Java-Themen 6
M String in Befehl umwandeln Allgemeine Java-Themen 10
S Überprüfen, ob ein Shell Befehl existiert! Allgemeine Java-Themen 4
G CMD befehl: BAT erstellen, reinschreiben und starten? Allgemeine Java-Themen 12
S Suche Pendant zu einem VB Befehl Allgemeine Java-Themen 2
P SQL Befehl Allgemeine Java-Themen 15
G Befehl an OS X cmd Allgemeine Java-Themen 7
L mit exec() befehl ausführen ( OS X / Linux) Allgemeine Java-Themen 8
T jar mit Befehl zur Vergrößerung des VM-Speichers Allgemeine Java-Themen 11
S mit welchem befehl kann ich mein programm autom. schließen Allgemeine Java-Themen 3
A Zusammenfassen von zwei Dateien (wie beim DOS-Befehl copy) Allgemeine Java-Themen 6
S String als Befehl interpretieren Allgemeine Java-Themen 2
S GetColor? anderer befehl Allgemeine Java-Themen 13
M Methode x mal ausführen auf Befehl Allgemeine Java-Themen 7
L linux befehl aus java programm starten Allgemeine Java-Themen 7
M Unter MacOS einen Befehl auf Konsole ausführen? Allgemeine Java-Themen 6
G JDK Version - exec Befehl Allgemeine Java-Themen 3
M Befehl unter Win98 ausführen? Allgemeine Java-Themen 3
M Befehl aus Anwendung starten Allgemeine Java-Themen 7
C shell befehl mit java ein- und auslesen Allgemeine Java-Themen 2
B befehl "java" wird nicht gefunden Allgemeine Java-Themen 4
S Validation Annotation Funktionsparameter vs Funktion vs Attribut Allgemeine Java-Themen 0
S Funktionsparameter Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben