如何在Java中调用DLL文件

3

我需要在Java中调用一个名为 advapi32.dll 的动态链接库以便使用其 CryptEncrypt 函数进行加密。是否可以通过JNI访问dll文件的函数,还是有其他更好的方法?

advapi32.dll 文件位于Windows的system32文件夹中。

我尝试过以下方法:

System.loadLibrary("advapi32");

and

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)

“在 SO 上,如何实现 X 的可能方式”这个问题不符合我们的模式。 - David Heffernan
1
查看我在此处的答案:https://stackoverflow.com/questions/52944462/java-call-function-from-a-dll/52948018#52948018(当然,编辑不适用于您的问题)。 - user2543253
1个回答

1
使用以下命令指定库路径。
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 );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接