我使用JNA调用从C DLL中的函数:Java和JNA的C函数传递PARAMS
extern _declspec(dllexport)
int ReadCP(IN OUT unsigned char* Id, IN OUT unsigned int* Size);
在Java中,我使用的接口,用于JNA使用此方法:
int ReadCP(byte[] id, IntByReference size);
我成功地加载DLL和调用方式方法:
byte[] id= new byte[10];
IntByReference size = new IntByReference();
IMimicDLL demo = (IMimicDLL) Native.loadLibrary("MyLib", IMimicDLL.class);
size.setValue(10);
//....
while(true){
demo.ReadCP(id, size);
//...
}
在循环中的第一次id
有一个正确的值,但即使逻辑应该改变它也保持相同的值。可能是什么问题?这与指针有关吗?
感谢您的回答业务登录,但我仍然有同样的问题:在while循环我有应该阅读卡ID的逻辑,我得到了即使我换了卡,同样的第一张卡的ID,** ID **不会改变。 –
这就是我所能提供的所有Java/JNA组件所能提供的帮助。是否有更多的文档可用于DLL方法? –
这是我在while循环逻辑 '而(真){ \t \t \t \t尝试{ \t \t \t \t \t了Thread.sleep(1500); \t \t \t \t}赶上(InterruptedException的E1){ \t \t \t \t \t e1.printStackTrace(); \t \t \t \t} \t \t \t \t如果(demo.cardPresent()== 0 &&读==假){ \t \t \t \t \t demo.ReadCP(ID,大小); \t \t \t \t \t尝试{ \t \t \t \t \t \t的System.out.println(” - 编号: “+新的字符串(id.getByteArray(0,10),” UTF-8" )); \t \t \t \t \t \t read = true; \t \t \t \t \t \t continue; \t \t \t \t \t}赶上(例外){ \t \t \t \t \t \t ex.printStackTrace(); \t \t \t \t \t} \t \t \t \t}否则如果(!demo.cardPresent()= 0){ \t \t \t \t \t读取= FALSE; \t \t \t \t} \t \t \t}' –