Позвоните 86x Dll с Java - PullRequest
       5

Позвоните 86x Dll с Java

0 голосов
/ 18 декабря 2018

Я пытаюсь вызвать x86 DLL, которую я создал с помощью VC 6, из java-проекта на Eclipse, сначала попробуйте получить сообщение об ошибке, говорящее, что я не могу вызвать x86 DLL из среды x64 и что DLL может 'не быть загруженным.Итак, я установил x86 jre, и у меня больше нет проблем с зарядкой DLL.Но когда я пытаюсь вызвать функцию c ++, я получаю следующее исключение:

     Exception in thread "main" java.lang.UnsatisfiedLinkError: mm.SimpleDLL.SimpleDLL_Calculation_Add(II)I

Может кто-нибудь помочь мне?Спасибо.

SimpleDLL.h

    #ifndef SIMPLE_DLL_H
    #define SIMPLE_DLL_H

    namespace SimpleDll
    {

    extern class Calculation
    {
    public:
     static __declspec(dllexport) int Add(int a, int b);
    };
    }

    #endif SIMPLE_DLL_H

SimpleDLL.cpp

    #include "SimpleDll.h"

    namespace SimpleDll
    {

       int Calculation::Add(int a, int b)
      { return a + b; }

    }

SimpleDLL.java

    package mm;

    public class SimpleDLL {

        static
        {
            System.load("D:\\SimpleDLL.dll");   
        }
        public static void main(String ar[])
        {
            System.out.println("Hello world from Java");
            SimpleDLL t=new SimpleDLL();
            int x = t.SimpleDLL_Calculation_Add(6, 7);
            System.out.println("Resultat  "+x);
        }
        public native int SimpleDLL_Calculation_Add(int a, int b);
    }

Просмотр экспортированных функций DLL

Решено с использованием библиотеки JNA, я использовал эту ссылку для прохождения

1 Ответ

0 голосов
/ 18 декабря 2018

Вам необходимо создать 32-битную DLL и файл .h, используя javah для точной подписи, которую ожидает Java.Обычно это что-то вроде

JNIEXPORT jboolean JNICALL Java_Sample1_booleanMethod
  (JNIEnv *, jobject, jboolean);

из https://medium.com/@bschlining/a-simple-java-native-interface-jni-example-in-java-and-scala-68fdafe76f5f

Альтернативный подход заключается в использовании библиотеки, такой как JNA или JNR-FFI, которая позволяет вам связываться с библиотекой C без написания этогокод моста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...