使用JNA访问从Java编译为本机代码的c#方法

本文关键字:本机代码 方法 编译 JNA 访问 Java 使用 | 更新日期: 2023-09-27 18:15:52

我有一个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的主方法中调用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方法?

使用JNA访问从Java编译为本机代码的c#方法

我认为你试图在错误的地方加载DLL文件,它应该在主方法。请看看这里:http://aboulton.blogspot.com/2012/07/netbeans-and-java-native-access.html