import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
public class TestDll {
private static final String dll="und.dll";
public static void main(String[] args){
try {
JNative n=null;
if(JNative.isLibraryLoaded(dll)){
System.out.println("...........");
}else{
n=new JNative(dll,"open");
n.setRetVal(Type.INT);
n.setParameter(0,Type.INT,"1");
n.invoke();
String str=n.getRetVal();
System.out.println(str.length()+"....."+str);
if(n.getRetValAsInt()==2){
JNative jn=new JNative(dll,"Getopp");
jn.setRetVal(Type.STRING);
jn.invoke();
String str1=jn.getRetVal();
Pointer pointer1=createPointer();
JNative j=new JNative(dll,"Getoop");
j.setRetVal(Type.STRING);
j.setParameter(0,pointer1);
j.invoke();
String str2=j.getRetVal();
System.out.println(str2+str2.length());
String ID=str2.substring(0,16);
System.out.println(ID+"id.....");
String obj="";
String s1=str2.substring(16,17);
System.out.println("s1..."+s1);
if(s1.equals("=")){
System.out.println("if");
obj=str2.substring(0,16);
System.out.println(obj);
}else{
System.out.println("else");
obj=str2.substring(0,19);
}
}
}
} catch (NativeException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} catch (IllegalAccessException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
这个程序纠结了一周后,今天终于搞定了,开始不明白是什么意思,后来才知道,之前为什么我通常会得到一个int类型的×××数字,而不是想要的字符串结果?原因并不是getRetVal()方法有问题,而是因为我在调用第一个方法打开端口后,本该执行另外的两个返回得到想要的返回结果,但是我却一直在考虑open方法从哪里得到返回结果?之所以这样想的原因是因为第一个方法执行后控制台会打印结果,但是返回值始终都是一个×××的数字,所以比较纠结,为啥我总是不可能在第一个返回截取返回值,而后我在正常执行第一个方法后,然后接着执行第二个方法后和第三个方法后,返回结果终于在getRetVal方法中得到了!呵呵,关于这个问题,可能本人描述不是很清楚,大家如果遇到类似的问题可以直接问我就OK了,或者加138153063QQ群,也可以!呵呵就写到这里了。