使用JNAerator和ftd2xx库的JNA / Java

时间:2016-05-04 22:19:46

标签: java winapi jna

我使用JNA相对较新,并找到了JNAerator工具。我认为这将是一个简单的方法,但是,我如何生成我的界面和各种文件,我发现它很难调试或理解为什么它可能无法正常工作。 Windows编程并不是我的强项,因此JNA尝试让自己的生活变得轻松......

页眉文件位于:http://www.ftdichip.com/Support/Knowledgebase/index.html?ftd2xx_h.htm

它在这里生成了以下Java JNA文件:http://pastebin.com/hpJgSRMk

现在我的示例App只是试图列出那些连接的设备,然后我可以迭代并操纵等等。

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(火星)和Web启动版本的JNAerator。

1 个答案:

答案 0 :(得分:0)

如果你对指针没有一个正确的理解,你就会陷入混乱的世界。您的调用需要指向DWORD(Java int)的指针。您正在传入一个,但它的默认值为零,这与NULL指针相同。如果您使用IntByReference,则在调用后至少可以使用IntByReference.getValue()来查看本机方法"返回的内容"你传递给它的内存缓冲区。