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