java - 如何在java中调用dll文件
问题描述
我需要在 java 中调用一个 DLL 文件advapi32.dll以便我可以使用它的CryptEncrypt函数进行加密。是否可以通过JNI访问dll文件的功能或者有没有其他更好的方法
advapi32.dll 位于 windows 的 system32 文件夹中
我尝试使用
System.loadLibrary("advapi32");
和
Runtime.getRuntime().loadLibrary("C:/Windows/System32/crypt32.dll");
Runtime.getRuntime().loadLibrary() 给出以下错误
Exception in thread "main" java.lang.UnsatisfiedLinkError: no C:/Windows/System32/crypt32.dll in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.Runtime.loadLibrary(Unknown Source)
at mail.encrypt.main(encrypt.java:17)
解决方案
使用以下命令指定库路径
java -Djava.library.path=C:/Windows/System32/
或在代码中使用以下黑客方式
System.setProperty( "java.library.path", "C:/Windows/System32/" );
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );
推荐阅读
- excel - 比较两张表并检查不同的值/数据并更新主表
- ios - 当图像在模态div中时,IOS长按没有“保存图像”选项
- javascript - 如何在角度 6 中实现选择下拉菜单(按搜索过滤),如何按名称属性过滤对象
- javascript - React Native 中除图像外的顶部底部文本
- gridview - GridView 丢失了 NotIndexed 位置中的项目跟踪,并且许多项目不再显示
- python - 从字典格式的字符串创建字典?使用蟒蛇
- c++ - std::istringstream ">>" 运算符中的“二进制表达式的无效操作数”
- c# - CSS+JS 资源和 Blazor .NET Core 3.0 应用程序编译
- android - 如何从伪装成麦克风的 USB 加速度传感器获取数据?
- list - Haskell 无法匹配奇怪的预期类型