java - java调用dll文件的方法

标签 java dll java-native-interface dllimport advapi32

我需要在 java 中调用一个 DLL 文件 advapi32.dll 以便我可以使用它的 CryptEncrypt 函数进行加密。是否可以通过JNI访问dll文件的功能,或者有没有其他更好的方法

advapi32.dll is found in system32 folder of windows

我试过用

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

关于java - java调用dll文件的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53494441/

相关文章:

c++ - R代码或.R文件的DLL

android - 在 Android 上使用 JNI 使用上下文指针调用函数会导致段错误

c++ - 调整字节数组的大小

java - 糟糕的 : Suggest design for the following scenario

java - 如何关闭Java Input Streams?

c++ - std::type_index 跨 DLL 是否安全

deployment - 将 dll 的配置文件移动到调用 dll 的应用程序

android - 如果我有 32 位 native 库,Android 应用程序仍然是 64 位吗?

java - Jackson JSON、不可变类和接口(interface)

java - forEach lambda 会导致竞争条件吗?