首页 > 解决方案 > 如何在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)

标签: javadlljava-native-interfacedllimportadvapi32

解决方案


使用以下命令指定库路径

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 );

推荐阅读