JNative使用深入解析——基本编程

   继续讲解《Jnativ的使用深入解析》,在这一章节中,我们将解析jnative最基本的使用,以及一些常见问题及其解决方法。

   首先我们先给出一段小代码,然后一步一步解析这段小代码,通过这段小代码,我们就知道Jnative的使用是多么的简单。

import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.misc.basicStructures.DWORD;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;


public class ADLLOP {
        private  static  String dllNmae ="a.DLL";
public static int  disConnect(int hHandle) throws NativeException, IllegalAccessException
	{
		JNative jnative = new JNative(dllNmae,"disConnect");
		jnative.setRetVal(Type.INT);
		int pindex = 0;
		jnative.setParameter(pindex++, hHandle);
		jnative.invoke();
		return jnative.getRetValAsInt();
	}
}

  其中成员变量"a.dll"就是DLL的名称。

  //调用a.dll中disconnect方法

  JNative jnative = new JNative(dllNmae,"disConnect");

  //设置返回类型为int,也可以设置为float,string等类型

  jnative.setRetVal(Type.INT);

  //设置第一个参数为hHandle

  jnative.setParameter(pindex++, hHandle);

  //正式执行这个函数

   jnative.invoke();

 //设置返回值为int,并返回

   return jnative.getRetValAsInt();

 

以上就是jnative的一个例子,你看,使用是多么的方便呀,当然这只是最基本的一个例子,比如传递指针呀,数组呀,以及传出参数如何传递都还没有涉及。

以上的代码运行可能会出现以下的问题

(1)Exception in thread "main" org.xvolks.jnative.exceptions.NativeException: DLL a  not found

 

(2)fuction XXX not found.

 

出现以上的问题可能由以下的原因引起:

 

(1)检查所要调用的DLL是否已经放入system32目录下,并且其依赖的DLL都已经全部放入。

 

(2)如果所要调用的DLL放入的是其他的目录,检查是否配置环境变量path.其依赖的DLL是否放入完全此目录。

 

(3)代码中的方法名称是否准确。

 

(4)系统时间是否准确,如果系统时间时间不准确,可能也会影响调用的顺利进行。

 

以上就是最基本的jnative的使用。下一章节将进入《JNative使用深入解析——传递复杂结构体》,讲解传递结构体的基本方法。

相关资源:jnative使用方法总结
已标记关键词 清除标记
相关推荐
准备工作: 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 .....
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页