我是一个使用JNA的新手,并且发现了JNAerator工具。我认为这将是一个简单的方法,然而,我是如何生成我的界面和各种文件的,我发现很难调试或理解为什么它可能不工作。Windows编程不是我的强项,因此我尝试用JNA让自己的生活变得更轻松……
头文件在这里: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,并且这种生成的代码将足够容易地为这个特定的目的而工作。
有什么线索吗,还是应该回到基本问题上来?
我使用的是Windows7,使用的是Eclipse (Mars)和JNAerator的webstarted版本。
发布于 2016-05-06 19:17:39
如果你不能很好地理解指针,你就会陷入一个混乱的世界。您的调用需要一个指向DWORD (Java int)的指针。您传入了一个,但它的默认值为零,这与空指针相同。如果使用IntByReference,则至少可以在调用之后使用IntByReference.getValue()来查看传递给它的内存缓冲区中本机方法“返回”给您的内容。
https://stackoverflow.com/questions/37039038
复制相似问题