java调用相互依赖的dll的处理方法是什么
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章将为大家详细讲解有关java调用相互依赖的dll的处理方法是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、问题描述最近在做一个功能时遇
千家信息网最后更新 2025年02月03日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安全错误
数据库的锁怎样保障安全
seq数据库服务器
承接石器服务器架设
招聘网络技术运营
归类先例数据库
岳阳软件开发培训学费
网络安全健康上网作文
服务器api开发
服务器一共有多少钻石
使用服务器做什么是违法的
数据库计算更新会造成并发问题么
工业操作系统数据库中间件
河北服务器工控机箱哪家好
学软件开发到哪里
通信软件开发转行
未成年网络安全案件
数据库行级锁和表锁
数据库知识基础笔试题
电脑网络技术支持
lol服务器的ip
校园网络安全的意义
招聘网络技术服务合同
建立数据库android
php数据上传服务器
python网页数据库接口
网络安全的电视剧
甲骨文高级数据库系统工程师
魔兽世界服务器比例在哪里查询
苹果手机软件开发哪家有名
浪潮服务器boot图片
数据库查询最新的项