当java 用jna调用dll,报错,main方法调用好用,其他方法调用不好用,是因为把下面的接口类和具体方法放在了一起,应该把他分开,接口单放一个接口文件,否则生成class文件时,接口文件名称会有问题,导致只有main方法调用成功,因为主方法是直接调用的,而不是通过class调用
public interface libVtExtAPI extends Library {
libVtExtAPI INSTANCE = (libVtExtAPI) Native.loadLibrary("VtExtAPI64", libVtExtAPI.class);
int VtExtCode (byte[] codeBuff);
int VtExtInit (String licPath, int logType);
int VtExtInitWithServer(String ip, int port, String appid, String appkey, int logFlag);
int VtExtIsCrypt(String path, Object isEnc);
int VtExtEncryptFile(String src, String dest, int cryptMode, int domain);
int VtExtDecryptFile(String src, String dest);
int VtExtGetCryptFileDomain(String path, Object domain);
int VtExtOutsidePack(String config, int length);
}
public static int VtExtCode (byte[] code)
{
int sdkReslut = libVtExtAPI.INSTANCE.VtExtCode(code);
if (sdkReslut == 0)
{
String res = new String(code);
System.out.println(res);
}
else
{
System.out.println("VtExtCode Error: "+ sdkReslut);
}
return sdkReslut;
}
public static int VtExtInit(String licensePath, int logFlag)
{
int sdkReslut = libVtExtAPI.INSTANCE.VtExtInit(licensePath, logFlag);
if (sdkReslut == 0) {
System.out.println("激活成功");
} else {
System.out.println("VtExtInit Error: "+ sdkReslut);
}
return sdkReslut;
}
public static int VtExtInitWithServer(String ip, int port, String appid, String appkey, int logFlag)
{
int sdkReslut = libVtExtAPI.INSTANCE.VtExtInitWithServer(ip, port, appid, appkey, logFlag);
if (sdkReslut == 0) {
System.out.println("激活成功");
} else {
System.out.println("VtExtInitWithServer Error: "+ sdkReslut);
}
return sdkReslut;
}
public static int VtExtIsCrypt(String path, IntByReference isEnc)
{
int sdkReslut = libVtExtAPI.INSTANCE.VtExtIsCrypt(path, isEnc);
if (sdkReslut == 0) {
if (isEnc.getValue() == 0) {
System.out.println("当前文件不是加密文件");
}
else{
System.out.println("当前文件是加密文件");
}
} else {
System.out.println("VtExtIsCrypt Error: "+ sdkReslut);
}
return sdkReslut;
}
public static int VtExtGetCryptFileDomain(String path, IntByReference domain)
{
int sdkReslut = libVtExtAPI.INSTANCE.VtExtGetCryptFileDomain(path, domain);
if (sdkReslut == 0) {
if (domain.getValue() == 0) {
System.out.println("当前文件不是加密文件");
}
else{
System.out.println("当前文件是加密文件");
}
} else {
System.out.println("VtExtIsCrypt Error: "+ sdkReslut);
}
return sdkReslut;
}
public static int VtExtEncryptFile(String srcPath, String destPath, int cryptMode, int domain)
{
int sdkReslut = libVtExtAPI.INSTANCE.VtExtEncryptFile(srcPath, destPath, cryptMode, domain);
if (sdkReslut == 0) {
System.out.println("文件加密成功");
} else {
System.out.println("VtExtEncryptFile Error: "+ sdkReslut);
}
return sdkReslut;
}
public static int VtExtDecryptFile(String srcPath, String destPath)
{
int sdkReslut = libVtExtAPI.INSTANCE.VtExtDecryptFile(srcPath, destPath);
if (sdkReslut == 0) {
System.out.println("文件解密成功");
} else {
System.out.println("VtExtDecryptFile Error: "+ sdkReslut);
}
return sdkReslut;
}
public static int VtExtOutsidePack()
{
String outconfig = "{ "version":"1.0", "password":"", "packToRes":false, "limitReadOnly":false, "limitPrint":false, "limitOpen": { "limitCount":9, "limitTime":true, "timeStart":"2019-4-1", "timeEnd":"2019-9-1" }, "policyPath":"/home/wmk/test/cfg/policy.xml", "resDir":"/home/wmk/test/res/", "tmpDir":"/home/wmk/test/tmp/", "srcDir":"/home/wmk/test/src/", "dstDir":"/home/wmk/test/dst/", "dstZipPath":"/home/wmk/test/package.zip", "allowOpenUsers":[ { "username":"a", "password":"e10adc3949ba59abbe56e057f20f883e"}, { "username":"b", "password":"c4ca4238a0b923820dcc509a6f75849b"} ] }";
int configlen = outconfig.length();
int sdkReslut = libVtExtAPI.INSTANCE.VtExtOutsidePack(outconfig, configlen);
if (sdkReslut == 0) {
System.out.println("外发文件制作成功");
} else {
System.out.println("VtExtOutsidePack Error: "+ sdkReslut);
}
return sdkReslut;
}



