java调用相互依赖的dll的处理方法是什么
发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,这篇文章将为大家详细讲解有关java调用相互依赖的dll的处理方法是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、问题描述最近在做一个功能时遇
千家信息网最后更新 2025年11月16日java调用相互依赖的dll的处理方法是什么
这篇文章将为大家详细讲解有关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;/** * * ClassName: DllLoadClass
* Function: TODO ADD FUNCTION.
* Reason: TODO ADD REASON(可选).
* date: 2022年1月27日 下午5:08:21
* * @author 行则将至 * @version */public class DllLoadClass { /** * * ClassName: A
* Function: TODO 加载A.
* Reason: TODO ADD REASON(可选).
* date: 2022年1月27日 下午5:08:58
* * @author 行则将至 * @version DllLoadClass */ public interface A extends StdCallLibrary { String dllName = "dllv2/A"; A INSTANCE = Native.load(dllName,A.class); public String a(String inString); } /** * * ClassName: B
* Function: TODO 加载B.
* Reason: TODO ADD REASON(可选).
* date: 2022年1月27日 下午5:09:27
* * @author 行则将至 * @version DllLoadClass */ public interface B extends StdCallLibrary { String dllName = "dllv2/B64"; B INSTANCE = Native.load(dllName,B.class); } /** * * ClassName: C
* Function: TODO 加载C.
* Reason: TODO ADD REASON(可选).
* date: 2022年1月27日 下午5:09:41
* * @author 行则将至 * @version DllLoadClass */ public interface C extends StdCallLibrary { String dllName = "dllv2/C64"; C INSTANCE = Native.load(dllName,C.class); } /** * * ClassName: D
* Function: TODO 加载D.
* Reason: TODO ADD REASON(可选).
* date: 2022年1月27日 下午5:09:50
* * @author 行则将至 * @version DllLoadClass */ public interface D extends StdCallLibrary { String dllName = "dllv2/D64"; D INSTANCE = Native.load(dllName,D.class); } /** * * ClassName: E
* Function: TODO 加载E.
* Reason: TODO ADD REASON(可选).
* date: 2022年1月27日 下午5:10:37
* * @author 行则将至 * @version DllLoadClass */ public interface E extends StdCallLibrary { String dllName = "dllv2/E64"; E INSTANCE = Native.load(dllName,E.class); } /** * * ClassName: F
* Function: TODO 加载F.
* Reason: TODO ADD REASON(可选).
* date: 2022年1月27日 下午5:10:01
* * @author 行则将至 * @version DllLoadClass */ public interface F extends StdCallLibrary { String dllName = "dllv2/F64"; F INSTANCE = Native.load(dllName,F.class); } /** * * ClassName: G
* Function: TODO 加载G.
* Reason: TODO ADD REASON(可选).
* date: 2022年1月27日 下午5:10:10
* * @author 行则将至 * @version DllLoadClass */ 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的处理方法是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
代码
方法
处理
内容
多个
就是
接口
文章
更多
模板
知识
篇文章
参考
支持
不同
不错
上边
不用
入口
办法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
威海智慧团建软件开发
潍坊fil服务器
服务器多ip如何切换使用
乌镇互联网黑科技
数据库查询实验思考
国产串口终端服务器价格
初中学生网络安全问题
查看本地服务器
梦幻多开选择服务器还是家用
核数据库查询中子产额
汕头信息软件开发联系方式
星际争霸服务器
数据库学生表的数据类型
5g网络安全概念股票
一路服务器几个cpu
软件开发前端好
信用卡还款数据库表设计
南开大学网络安全研究
qt 连接数据库之前要配置
方舟手游私人服务器怎样修改
广州市天柘网络技术有限公司
方舟哪个服务器有精灵球
国家对互联网 科技的政策
造假软件开发者判刑
b站台湾服务器分享
一念逍遥此服务器证书无效
软件开发法规清单
美国的网络安全攻防验证期
数据库增删改查基本语法结构
北京市宏观数据库