簡體   English   中英

從Java呼叫86x Dll

[英]Call a 86x Dll from Java

我試圖從Eclipse上的Java項目中調用使用VC 6創建的x86 DLL,首先嘗試出現一個錯誤,提示我無法從x64環境調用x86 DLL,並且無法加載該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庫解決,我使用此鏈接進行了演練

您需要使用javah構建32位DLL和.h文件,以獲得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庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM