使用JNative调用dll,传入参数错误。

itkai 2014-02-10 11:55:42
使用JNative调用dll,传入参数错误,请大家帮忙看下,怎么才能正确传入。谢谢。

dll函数:
DPSDK_DLL_API int32_t DPSDK_CALL_METHOD DPSDK_Login (IN int32_t nPDLLHandle, IN Login_Info_t* pLoginInfo, IN int32_t nTimeout);

typedef struct tagLoginInfo {
char szIp; // 服务IP
char szUsername; // 用户名
char szPassword; // 密码
dpsdk_protocol_version_e nProtocol; // 协议库类型,000、001、002
}Login_Info_t;

typedef enum {
DPSDK_PROTOCOL_VERSION_I = 1,
DPSDK_PROTOCOL_VERSION_II = 2,
}dpsdk_protocol_version_e;



现JNative调用:
public class DssLogin extends AbstractBasicData<DssLogin> {

public static void main(String[] args) throws NativeException,
IllegalAccessException {
System.out.println(getDssLogin());
}

public static int getDssLogin() throws NativeException,
IllegalAccessException {
JNative jnative = new JNative("DPSDK_Core", "DPSDK_Login");
jnative.setRetVal(Type.INT);
jnative.setParameter(0, 1);
DssLogin dssLogin = new DssLogin();
jnative.setParameter(1, dssLogin.getPointer());
jnative.setParameter(2, 10000);
jnative.invoke();
return Integer.parseInt(jnative.getRetVal());
}

public DssLogin() throws NativeException {
super(null);
createPointer();
}

@Override
public Pointer createPointer() throws NativeException {
pointer = new Pointer(MemoryBlockFactory.createMemoryBlock(getSizeOf()));
pointer.setStringAt(0, "192.168.1.108");
pointer.setIntAt(1, 9000);
pointer.setStringAt(2, "system");
pointer.setStringAt(3, "123456");
pointer.setStringAt(4, "001");
return pointer;
}

@Override
public int getSizeOf() {
return 64;
}

@Override
public DssLogin getValueFromPointer() throws NativeException {
return null;
}

}
...全文
349 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
teemai 2014-02-13
  • 打赏
  • 举报
回复
careers1111 2014-02-13
  • 打赏
  • 举报
回复
学习学习学习
huhaixiaoqi_ 2014-02-12
  • 打赏
  • 举报
回复
引用 4 楼 itkai 的回复:
[quote=引用 3 楼 fangmingshijie 的回复:] 你的dll需要的是char,你的java是string,类型不匹配。
JNative用得不熟,请问怎么样穿char进去。谢谢。[/quote] java String to char
itkai 2014-02-12
  • 打赏
  • 举报
回复
跪求做过的大神指点。。。。。。。。。。
itkai 2014-02-12
  • 打赏
  • 举报
回复
引用 7 楼 u013216065 的回复:
[quote=引用 4 楼 itkai 的回复:] [quote=引用 3 楼 fangmingshijie 的回复:] 你的dll需要的是char,你的java是string,类型不匹配。
JNative用得不熟,请问怎么样穿char进去。谢谢。[/quote] java String to char [/quote] java String to char 好像JNative没有门(入口)来转。
  • 打赏
  • 举报
回复
建议使用jna,技术相对jnative要成熟一些。
itkai 2014-02-11
  • 打赏
  • 举报
回复
有使用jNative处理dll里指针和函数回调方面的大牛吗,请帮忙看看呀。谢谢啦。
  • 打赏
  • 举报
回复
你把string转为char
itkai 2014-02-10
  • 打赏
  • 举报
回复
引用 3 楼 fangmingshijie 的回复:
你的dll需要的是char,你的java是string,类型不匹配。
JNative用得不熟,请问怎么样穿char进去。谢谢。
  • 打赏
  • 举报
回复
你的dll需要的是char,你的java是string,类型不匹配。
itkai 2014-02-10
  • 打赏
  • 举报
回复
引用 1 楼 fangmingshijie 的回复:
你把string转为char


不太明白是把哪个string转为char,
如果是pointer,他没有char的传入方法,如图片。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧