javajava-native-interfacejna

Java JNA load DLL


I have a problem when I try load a DLL like this:

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

I see this:

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)

I read and I did this:


Solution

  • From the 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 doesn't work with a full path, try instead System.load If you can't use that you could also specify the directory of the dll before the loading by setting the enviroment variable of java like this

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

    But this is higly not recommended since it will works only on your computer