Question

I have a .net 4.0 dll it has a namespace and in that namespace there is a class, I wants to access procedures inside that class using jna.

I have included jna.jar as well as platform.jar(in case) using maven, My java code looks like this

MyConfiguration interface

import com.sun.jna.Library;

public interface MyConfiguration extends Library{
    public void callInterface();
}

Accessing dll code

MyConfiguration myAPI = (MyConfiguration) Native
                       .loadLibrary("dll/MyAPI.dll", MyConfiguration.class);
System.out.println("Interface Created");
System.out.println("Calling Interface");
myAPI.callInterface();

but i am getting the exception--->

Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'myInterface': The specified procedure could not be found.

    at com.sun.jna.Function.<init>(Function.java:208)
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:536)
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:513)
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:499)
    at com.sun.jna.Library$Handler.invoke(Library.java:199)
    at com.sun.proxy.$Proxy0.myInterface(Unknown Source)
    at foo.App.main(App.java:83)

I have checked the dll using dll decompiler tool, and it has the called function, can somebody help out.

Was it helpful?

Solution

dll using dll decompiler tool

You need to use a PE (portable executable) viewer to look for entries in the export table. (Depends is one.)

Most .NET DLLs don't export functions that way. When they do, it's through a mechanism called Reverse P/Invoke, which isn't supported by most Microsoft .NET language compilers. The C++/CLI language was designed for this purpose.

You might find a shorter path to success with a Java-.NET bridge product. Or, a Java-COM bridge product if the .NET DLL exposes classes as COM objects. (Use OLE/COM Object Viewer to inspect a COM DLL.)

Also, be sure the DLL has the same bitness as your JVM process (e.g., java.exe or javaw.exe), unless you are using as an out-of-process COM object.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top