Java调用示例
加载SDK
在程序包名下方引入动态库
LibSdk INSTANCE = Native.loadLibrary(\"libsdk.so\", LibSdk.class);//路径可以修改。示例中的libsdk.so该程序在同一路径下。可根据情况自行指定。
调用示例
Test.java
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
public interface LibSdk extends Library {
LibSdk INSTANCE = Native.loadLibrary("/opt/tip/bin/sdk/so_path/libsdk.so", LibSdk.class);
Pointer GetDeviceId(GoString.ByValue sn);
Pointer OnLineUpgrade(GoString.ByValue lid, GoString.ByValue sn, GoString.ByValue key, GoString.ByValue salt, int pkgSize);
Pointer OffLineUpgrade(GoString.ByValue dataPath, GoString.ByValue lid, GoString.ByValue sn, GoString.ByValue salt,
int pkgSize);
Pointer QueryIOC(GoString.ByValue query);
Pointer QueryIP(GoString.ByValue query);
void FreeMemory(Pointer str);
}
public static void main(String args[]) {
LibSdk.INSTANCE.OnLineUpgrade("lid", "sn", "key", "salt", 0);
GoString.ByValue query_ip_lst = new GoString.ByValue(
"192.241.211.252,180.182.234.19,185.220.102.250,117.34.72.226");
Pointer ipRes = LibSdk.INSTANCE.QueryIP(query_ip_lst);
String ipAns = ipRes.getString(0);
LibSdk.INSTANCE.FreeMemory(ipRes); //调用内存释放函数。否则在一个不间断的服务中调用动态库会内存泄漏
}
Gostring.java
import com.sun.jna.Structure;
import java.util.ArrayList;
import java.util.List;
public class GoString extends Structure {
public String p;
public long n;
public GoString(String str) {
this.p = str;
this.n = str.getBytes(StandardCharsets.UTF_8).length;
}
@Override
protected List < String > getFieldOrder() {
List < String > fields = new ArrayList < > ();
fields.add("p");
fields.add("n");
return fields;
}
public static class ByValue extends GoString implements Structure.ByValue {
public ByValue(String str) {
super(str);
}
}
}