2016-05-04 11 views
0

Ich bin relativ neu in der Verwendung von JNA und fand das JNAerator-Tool. Ich dachte, es wäre ein einfacher Weg, um loszulegen, aber wie ich meine Schnittstellen und verschiedene Dateien generiert habe, ich finde es schwer zu debuggen oder zu verstehen, warum es nicht funktioniert. Windows-Programmierung ist nicht meine Stärke, daher der Versuch mit JNA machen das Leben einfach für mich ...JNA/Java mit JNAerator und ftd2xx Bibliotheken

Die Header-Datei hier: http://www.ftdichip.com/Support/Knowledgebase/index.html?ftd2xx_h.htm

Und es erzeugt die folgende Java JNA Datei hier: http://pastebin.com/hpJgSRMk

Jetzt App meine Probe einfach versucht, diese angeschlossenen Geräte aufzulisten, die ich um dann laufen kann und manipulieren, etc ..

import com.sun.jna.NativeLong; 

import ft2xx.Ftd2xxLibrary; 
import ft2xx.Ftd2xxLibrary.LPDWORD; 

public class Test { 
    public static void main(String[] args){ 
     LPDWORD lpd = new LPDWORD(); 
     NativeLong nl = Ftd2xxLibrary.INSTANCE.FT_CreateDeviceInfoList(lpd); 
     System.out.println("Call State: " + nl); 
    } 
} 

Das nach dem, was ich hier gelesen haben: http://www.ftdichip.com/Support/Documents/ProgramGuides/D2XX_Programmer's_Guide(FT_000071).pdf welches Details, wie man die verbundenen Geräte auflistet, die dann usw. iteriert werden können.

So gibt meine Methode eine 6 zurück, die einen ungültigen Parameter anzeigt, aber da ich den Code automatisch erzeugte, und es stapelt nicht, ich bin ein wenig ratlos, wie es weitergeht.

Ich benutzte JNAerator angesichts der schiere Anzahl der Methoden, die ich implementieren und verwenden musste, und war der Meinung, dass JNA und solcher generierter Code leicht genug wäre, um Arbeit für diesen speziellen Zweck zu machen.

Irgendwelche Hinweise, oder sollte ich zurück zu den Grundlagen?

Ich bin auf Windows 7, mit Eclipse (Mars) und der Webstart-Version von JNAerator.

Antwort

0

Wenn Sie kein gutes Verständnis von Zeigern haben, sind Sie in einer Welt der Verwirrung. Ihr Aufruf erwartet einen Zeiger auf eine DWORD (Java int). Sie übergeben einen Wert, aber der Standardwert ist Null, was einem Nullzeiger entspricht. Wenn Sie IntByReference verwenden, können Sie nach dem Aufruf mindestens IntByReference.getValue() verwenden, um zu sehen, was die native Methode Ihnen in dem Speicherpuffer "zurückgegeben" hat, den Sie übergeben haben.

Verwandte Themen