Loading DLL in Java - Eclipse - JNI

后端 未结 9 441
北荒
北荒 2020-12-17 18:19

I am trying to load a dll in java using the following code System.loadLibrary(\"mydll\");

The project is placed in D:\\development\\project\\ and i have placed t

相关标签:
9条回答
  • 2020-12-17 18:37

    System.loadLibrary loads the DLL from the JVM path (JDK bin path).

    If you want to load an explicit file with a path, use System.load()

    See also: Difference between System.load() and System.loadLibrary in Java

    public class MyClass
    {
        static 
        {
            System.load("MyJNI.dll");
        }
    }
    
    0 讨论(0)
  • 2020-12-17 18:38

    One problem you have is: System.load("D:\mydll.dll"); should be System.load("D:\\mydll.dll"); or System.load("D:/mydll.dll");

    I have had more success with System.load, but loadlibrary is better designed for multiplatform. It figures out the extension for you.

    0 讨论(0)
  • 2020-12-17 18:46

    Put your Almafa.dll into the C:/Java/jre7/lib or /bin sorry, I can`t remember exactly. After you have done no more configuration needed, just say

    static{ System.LoadLibrary("Almafa"); }

    in the class, where you want to load it. It is works only in Java project, in Android like project you need to use JNI. I had posted now the result of 3 days no sleeping :)

    0 讨论(0)
  • 2020-12-17 18:52

    I got my error resolved by using the following:

       static {
        try {
            System.loadLibrary("myDLL");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    Instead of using System.load("myDLL.dll")

    0 讨论(0)
  • 2020-12-17 18:54

    Where you specify the DLL filename in the library path, omit that. Additionally, your System.loadLibrary call should just be 'mydll'. I can tell you (from experience) that if you put the DLL in the root of your project in Eclipse (i.e., D:\Eclipse Workspace\Proj), it should work. Any further linker errors could be from dependency problems with finding other DLLs. The exception is the same. Use something like Dependency Walker (http://www.dependencywalker.com/) to see if your DLL relies on anything else not on the system library path.

    Edit: UnsatisfiedLinkError: Thrown if the Java Virtual Machine cannot find an appropriate native-language definition of a method declared native -- it seems like you are using a JNI function which does not exist.

    0 讨论(0)
  • 2020-12-17 18:54

    Check out how to properly set up the native dependencies here. Additionally, make sure you use the correct JVM: in my case, the DLL was not found because it was a 32 bit DLL, but I used the x64 JVM!

    0 讨论(0)
提交回复
热议问题