java 调用动态链接库_JAVA技巧:JNative调用动态链接库问题(SOS)

baede0559a44195933f914bf1b0f9f70.png

动态链接库的方法如下:__declspec(dllexport) ret __stdcall rLachTran(const char *pc_trancode,

const char *pc_clicode,

const char *pc_orgcode,

const char *pc_ttycode,

const int i_brandid,

const char *pc_reqstamp,

const int i_reqseqno,

const char *pc_svrip,

const unsigned short us_svrport,

const char *pc_reqmsg,

char *pc_resmsg);

我需要发送一条短信随机码出去,而我的JNi类如下:package com.JNative;

package com.JNative;

import java.io.UnsupportedEncodingException;

import org.xvolks.jnative.JNative;

import org.xvolks.jnative.Type;

import org.xvolks.jnative.exceptions.NativeException;

import org.xvolks.jnative.pointers.Pointer;

import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;

public class Dll_Nat {

/**

* @param args

*/

public static void main(String[] args) throws NativeException ,IllegalAccessException{

// TODO Auto-generated method stub

Dll_Nat uc = new Dll_Nat();

String ret = null;

String result = uc.getNate("0023MBL_ZDtech_00001",

"0023MBL_SH_SVR00-01-02-03-04-05","ORGCODE",

"ttycode",0,"2008-08-25 15:51:55.025000", 1,

"218.201.33.11",50002,

"900001;00-01-02-03-04-05;1388*******~123435", ret);

System.out.println("转换成功的字节数为:"+result);

}

static JNative n = null;

static Pointer pointer;

public final int getNate(String trancode,

String clicode,

String orgcode,

String ttycode,

int brandid,

String reqstamp,

int reqseqno,

String svrip,

int svrport,

String reqmsg,

String resmsg) throws NativeException ,IllegalAccessException{

try{

n = new JNative("SwtThinClient.dll","rLachTran");

n.setRetVal(Type.INT);

int i =0 ;

n.setParameter(i++,trancode);

n.setParameter(i++,clicode);

n.setParameter(i++, orgcode);

n.setParameter(i++, ttycode);

n.setParameter(i++, brandid);

n.setParameter(i++, reqstamp);

n.setParameter(i++, reqseqno);

n.setParameter(i++, svrip);

n.setParameter(i++, svrport);

n.setParameter(i++, reqmsg);

n.setParameter(i++, resmsg);

n.invoke();

System.out.println(n.getRetVal());

return Integer.parseInt(n.getRetVal());

}catch(NativeException Ne){

System.out.println("NativeException: "+Ne.getMessage());

return -999;

}catch(IllegalAccessException Nen){

System.out.println("IllegalAccessException: "+Nen.getMessage());

return -888;

}

finally{

if (n != null)

n.dispose();

}

}

}

系统总是提示:不能链接服务器,而且C方法中的编码是ASCII编码,该问题需要如何处理?请大家指教。

具体系统提示如下:

[SwtThinClient.c][76][2008-08-26 13:19:06.118000] -> 提示:rLachTran调用开始

[SwtThinClient.c][138][2008-08-26 13:19:06.128000] -> 错误:连接服务器[218.201.33.11]失败,i_commtimeout_g[59990],WSAERRNO[10049]

[SwtThinClient.c][138][2008-08-26 13:19:06.128000] -> 错误:连接服务器[218.201.33.11]失败,i_commtimeout_g[59990],WSAERRNO[10049]

[SwtThinClient.c][138][2008-08-26 13:19:06.128000] -> 错误:连接服务器[218.201.33.11]失败,i_commtimeout_g[59990],WSAERRNO[10049]

2829f2ca24f0d0090cbba57f30759f23.png

JAVA技巧:JNative调用动态链接库问题(SOS).doc

下载Word文档到电脑,方便收藏和打印[全文共1692字]

编辑推荐:

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

下载Word文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
准备工作: 1.编译JnativeCpp 2.将编译出来的libJNativeCpp.so,拷贝到/usr/lib/,同时执行chmod 555 libJNativeCpp.so 测试过程简介 1.c测试libtest.so 环境:ubuntu10.4下 语言:c 编译名称为:libtest.so 涉及文件:so_test.h test_a.c test_b.c test_c.c 终端执行命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so 将编译得到到libtest.so拷贝到/usr/lib/,同时执行chmod 555 libtest.so 2.qt测试libmylib.so 环境:ubuntu10.4下 语言:c 编译工具:qt Creator 编译名称为:libmylib.so 将编译得到到libmylib.so拷贝到/usr/lib/,同时执行chmod 555 libmylib.so 3.编译环境安装 a.安装jdk 1.6 b.安装netBeans 6.8 c.创建javaApp工程 d.将JNative.jar添加到工程中 e.参考如下代码,编写后编译执行,并运行 import org.xvolks.jnative.JNative; import org.xvolks.jnative.Type; import org.xvolks.jnative.exceptions.NativeException; public class Main { public static void main(String[] args) throws NativeException, IllegalAccessException{ //纯c写到动态 JNative clib = new JNative("libtest.so", "test_a"); //调用libtest.so下到test_a函数 clib.setRetVal(Type.STRING); //设置此函数的返回值 clib.invoke(); //函数执行 System.out.println(clib.getRetVal());//输出函数返回结果 //qt写到动态 //以下部分使用qt编译到so,注意在函数声明前加 extern "C" //如extern "C" const char* getLocalHost(); JNative getstring = new JNative("libmylib.so", "getstring"); getstring.setRetVal(Type.STRING); getstring.invoke(); System.out.println(getstring.getRetVal()); } } 4.输出结果 this is in test_a... getstring hello .....

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值