java调用相互依赖的dll的处理方法
一、问题描述
最近在做一个功能时遇到java需要调用dll,并且dll有依赖关系,之前都是单独调用一个,其实调用dll的都是模板代码,本身没有太高的难度,主要是相互依赖的还是第一次碰见,特此记录一下并分享给需要的朋友参考。
二、处理办法
其中A是dll方法的入口,A依赖B,C,D,E,F,G五个dll,先定义接口继承StdCallLibrary ,编写加载各个dll的模板代码,需要依赖的都全部加载进来,我这儿是A依赖了B,C,D,E,F,G六个dll,所以我这里共写了六个接口,来分别加载不同的dll,主要是因为StdCallLibrary不支持加载多个dll,如果支持的话就不用写多个了,废话不多说直接上代码:
2.1 类定义
import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;
public class DllLoadClass {
public interface A extends StdCallLibrary {
String dllName = "dllv2/A";
A INSTANCE = Native.load(dllName,A.class);
public String a(String inString);
}
public interface B extends StdCallLibrary {
String dllName = "dllv2/B64";
B INSTANCE = Native.load(dllName,B.class);
}
public interface C extends StdCallLibrary {
String dllName = "dllv2/C64";
C INSTANCE = Native.load(dllName,C.class);
}
public interface D extends StdCallLibrary {
String dllName = "dllv2/D64";
D INSTANCE = Native.load(dllName,D.class);
}
public interface E extends StdCallLibrary {
String dllName = "dllv2/E64";
E INSTANCE = Native.load(dllName,E.class);
}
public interface F extends StdCallLibrary {
String dllName = "dllv2/F64";
F INSTANCE = Native.load(dllName,F.class);
}
public interface G extends StdCallLibrary {
String dllName = "dllv2/G64";
G INSTANCE = Native.load(dllName,G.class);
}
}
2.2 调用
上边虽然是定义出来了,那么怎么调用或者使用呢?调用其实也很简单,都定义出来了之后,其实就是需要咱们把依赖都加载进来即可,咱们仍然是直接上代码:
public class Test {
@SuppressWarnings("unused")
public static void main(String[] args) {
B b = DllLoadClass.B.INSTANCE;
C c = DllLoadClass.C.INSTANCE;
D d = DllLoadClass.D.INSTANCE;
F f = DllLoadClass.F.INSTANCE;
G g = DllLoadClass.G.INSTANCE;
A a = DllLoadClass.A.INSTANCE;
String result = a.a("");
}
}
原理就是调用一下成员变量,让其加载进来即可。
三、结语
道阻且长,行则将至,行而不辍,未来可期,加油。
到此这篇关于java调用相互依赖的dll的处理方法的文章就介绍到这了,更多相关java相互依赖的dll内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341