Использование JNA для доступа к методам C #, скомпилированным в нативный код из Java - PullRequest
2 голосов
/ 28 ноября 2011

У меня есть класс C # с одним методом, скомпилированным в собственный код, который я хочу вызвать из метода Java с использованием JNA .Этот класс упакован как dll в файл с именем DataGrabber.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);
}

, а затем, когда я вызываю этот метод GetData из основного метода в Java, вот так:

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?

1 Ответ

0 голосов
/ 10 января 2014

Я думаю, что вы пытаетесь загрузить файл DLL в неправильном месте, это должно быть в основном методе.Посмотрите здесь, пожалуйста: http://aboulton.blogspot.com/2012/07/netbeans-and-java-native-access.html

...