Pregunta

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.

¿Fue útil?

Solución

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top