Java JNA加载DLL

标签 java java-native-interface jna

当我尝试像这样加载 DLL 时遇到问题:

String a = "C:\\Users\\ElteGps 022\\Documents\\NetBeansProjects\\JavaApplication1\\src\\lib\\EQ2008_Dll.dll";
        String strDllFileName = m_strUserPath + "\\res\\EQ2008_Dll.dll";
        String strEQ2008_Dll_Set_Path = m_strUserPath + "\\res\\EQ2008_Dll_Set.ini";
        m_DllLibrary = (DllLibrary) Native.loadLibrary(a,DllLibrary.class);

我看到了这个:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'C:\Users\ElteGps 022\Documents\NetBeansProjects\JavaApplication1\src\lib\EQ2008_Dll.dll': Nie mo¿na odnaleæ okrelonego modu³
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:163)
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:236)
    at com.sun.jna.Library$Handler.<init>(Library.java:140)
    at com.sun.jna.Native.loadLibrary(Native.java:379)
    at com.sun.jna.Native.loadLibrary(Native.java:364)
    at javaapplication1.Fun.main(Fun.java:280)

我阅读并这样做了:

最佳答案

来自JNA javadoc

Library Search Paths A search for a given library will scan the following locations:

  1. jna.library.path User-customizable path
  2. jna.platform.library.path Platform-specific paths
  3. On OSX, ~/Library/Frameworks, /Library/Frameworks, and /System/Library/Frameworks will be searched for a framework with a name corresponding to that requested. Absolute paths to frameworks are also accepted, either ending at the framework name (sans ".framework") or the full path to the framework shared library (e.g. CoreServices.framework/CoreServices).
  4. Context class loader classpath. Deployed native libraries may be installed on the classpath under ${os-prefix}/LIBRARY_FILENAME, where ${os-prefix} is the OS/Arch prefix returned by Platform.getNativeLibraryResourcePrefix(). If bundled in a jar file, the resource will be extracted to jna.tmpdir for loading, and later removed (but only if jna.nounpack is false or not set).
You may set the system property jna.debug_load=true to make JNA print the steps of its library search to the console.

Native.loadLibrary 不适用于完整路径,请改用 System.load 如果你不能使用它,你也可以通过像这样设置java的环境变量来指定dll的目录加载之前

System.setProperty("jna.library.path", "C:\\Users\\ElteGps 022\\Documents\\NetBeansProjects\\JavaApplication1\\src\\lib");

但强烈不推荐这样做,因为它只能在您的计算机上运行

关于Java JNA加载DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39971371/

相关文章:

java - 如何使用 Eclipse 在 Java 中批量清理导入?

java - 保持连接到没有互联网的网络 - Android

JAVA SPRING BOOT - 在运行时交换环境变量的内容

java - CallVoidMethod jni 中的 SIGSEGV

java - 通过JNA从Java程序访问dll文件的问题

java - Jacob.jar 找不到 jacob-1.18-x86.dll

java - 为 armeabi 编译的文件是否有 armeabi-v7a 的一些问题

c++ - jclass 和 jobject 的 jni deleteRef

java - 如何在 JNA 中传递包含原始类型数组的结构?

javascript - 使用 JNA、Rhino、JavaScript 分配字符缓冲区