继续讲解《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使用深入解析——传递复杂结构体》,讲解传递结构体的基本方法。