我有一个C#类,其中一个方法已编译为本机代码,我想使用JNA从Java方法调用。该类在名为DataGrabber.dll的文件中打包为dll。 这是C#代码:
namespace GrabberLibrary {
public class Grabber {
public void GetData(String projectId, String importURI){
//implementation code
}
}
}
我按照建议实现了界面:
import com.sun.jna.Library;
import com.sun.jna.Native;
public interface Grabber extends Library{
Grabber INSTANCE = (Grabber)Native.loadLibrary("Grabber", Grabber.class);
void GetData(String projectId, String importURI);
}
然后当我用Java中的main方法调用这个GetData方法时:
System.setProperty("jna.library.path", "C:\\dlls");
Grabber sgl = Grabber.INSTANCE;
sgl.GetData("123", "http://localhost/test");
我得到以下异常:
java.lang.UnsatisfiedLinkError: Unable to load library 'Grabber': The specified module could not be found.
另一方面,如果我把dll的名称与C#代码(DataGrabber)中定义的命名空间相同,我得到:
java.lang.UnsatisfiedLinkError: Error looking up function 'GetData': The specified procedure could not be found.
如何调用GetData方法?
答案 0 :(得分:0)
我认为你试图在错误的地方加载DLL文件,它应该在main方法中。 请看这里:http://aboulton.blogspot.com/2012/07/netbeans-and-java-native-access.html