2016-05-04 42 views
0

我相对较新使用JNA,并找到JNAerator工具。我认为这将是一个简单的方法,但是,我如何生成我的接口和各种文件,我发现很难调试或理解为什么它可能无法正常工作。 Windows编程中是不是我的专长,所以用JNA,使生活容易为自己的尝试...JNA/Java使用JNAerator和ftd2xx库

头文件是在这里:http://www.ftdichip.com/Support/Knowledgebase/index.html?ftd2xx_h.htm

而且它产生了以下Java JNA文件位置:http://pastebin.com/hpJgSRMk

现在我的示例应用程序只是想列出这些连接的设备,我可以再重复左右和操纵等。

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); 
    } 
} 

这下面我在这里阅读:http://www.ftdichip.com/Support/Documents/ProgramGuides/D2XX_Programmer's_Guide(FT_000071).pdf其中详细说明如何列出连接的设备,然后可以迭代周围等..

所以,我的方法返回一个6,它表示一个无效的参数,但考虑到我自动生成的代码,它不堆叠,对于如何继续,我有点无知。

我使用了JNAerator,因为我需要实现和使用很多方法,并且相信JNA和这样生成的代码会很容易为这个特定目的而工作。

任何线索,还是我应该回到基础?

我在Windows 7上使用Eclipse(Mars)和JNAerator的webstarted版本。

回答

0

如果你对指针没有足够的理解,那么你陷入了一个混乱的世界。您的电话需要一个指向DWORD(Java int)的指针。你传入一个,但它的默认值为零,这与NULL指针相同。如果使用IntByReference,那么在调用之后,至少可以使用IntByReference.getValue()来查看通过它的内存缓冲区中本机方法“返回”的内容。