JNATIVE 调用DLL传参数问题

dengtao8201314 项目经理  2018-08-02 09:21:29
最近在调用读卡器的DLL文件 其中有个返回参数 试了很久 还是报错误码 求论坛牛人些帮忙看看 应该怎么传进去 下面贴码
DLL文件里面的说明

LONG
WINAPI
A6_Initialize
(
__in READERHANDLE hReader,
__in BYTE bResetMode,
__out PBYTE pbVerBuff,
__inout PDWORD pcbVerLength
);

参数

hReader 引用A6_Connect 返回的句柄值。

bResetMode 复位模式。可用值:
RESET_NOACTION 仅复位,不移动卡片。
RESET_EJECT 复位并移动读卡器内的卡片到前端持卡位。
RESET_RETAIN 复位并移动读卡器内的卡片到后端持卡位。

pbVerBuff 接收固件版本信息的缓冲区。

pcbVerLength 提供 pbVerBuff 参数的长度(字节数)并接收读卡器实际返回的长度。


返回值

如果函数调用成功,返回值为0, 其它值为错误码。


下面是自己的写调用代码


//读卡器复位
public int Initialize(String dllname,Pointer p,String mode,Pointer p1,Pointer p2){


try {

byte[] b = null;
b = ("RESET_EJECT").getBytes();

byte[] c = new byte[128];

int k = 0;

Pointer pArrIntInput = new Pointer(MemoryBlockFactory.createMemoryBlock(c.length));
for (int i = 0; i < c.length; i++) {
pArrIntInput.setByteAt(i, c[i]);
}

k = pArrIntInput.getSize();
System.out.println(pArrIntInput.getSize());

Pointer pArrIntInput1 = new Pointer(MemoryBlockFactory.createMemoryBlock(400));
pArrIntInput1.setIntAt(0, pArrIntInput.getSize());


JNative jnative = new JNative(dll_name,"A6_Initialize");
jnative.setRetVal(Type.INT);//
jnative.setParameter(0,p.getAsInt(0));//
jnative.setParameter(1,Type.VOID,b);//
jnative.setParameter(2,pArrIntInput);//
jnative.setParameter(3,pArrIntInput1);//
jnative.invoke(); //
System.out.println(jnative.getRetValAsInt()+"||||");//获取返回值并显示
int k1 = jnative.getRetValAsInt();

jnative.dispose();
return k;// 函数返回值
} catch (NativeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 1;
}



始终感觉pcbVerLength 这个值传的有问题,所有导致错误码,现在传参无效或为null
...全文
154 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
forplay 2018-08-06
你这个没有具体的报错的代码,怎么能知道什么问题?JNA了解一下吧,Jnative作者很多年就没更新了,虽然也很稳定!
回复
tianfang 2018-08-06
调用dll很麻烦。
32位dll?需要你用32位java开发,问题会少一些
回复
dengtao8201314 2018-08-02
大神些帮帮我
回复
相关推荐
发帖
Java EE
创建于2007-09-28

6.6w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2018-08-02 09:21
社区公告
暂无公告