我试图从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);
}
使用JNA库解决后,我使用了 link 进行浏览
答案 0 :(得分:0)
您需要使用.h
构建32位DLL和javah
文件,以获得Java期望的准确签名。通常是
JNIEXPORT jboolean JNICALL Java_Sample1_booleanMethod
(JNIEnv *, jobject, jboolean);
另一种方法是使用JNA或JNR-FFI之类的库,使您无需编写此桥接代码即可绑定到C库。