在java中怎么去调用C++编写的.dll函数?
公司的项目需要用到C++编写的发送短信的函数,然后我想在java这边进行调用,不知道如何调用?总是报出异常,Exception in thread "main"
java.lang.IllegalStateException: JNative library not loaded, sorry !
at org.xvolks.jnative.JNative.<init>(JNative.java:337)
at org.xvolks.jnative.JNative.<init>(JNative.java:269)
at com.hd.test.SendSMS.send_sms(SendSMS.java:16)
at com.hd.test.SendSMS.main(SendSMS.java:52)
有的时候还报出:Exception in thread "main"
java.lang.UnsatisfiedLinkError: no src/MFCDLL/hest_global_file.dll in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at SendMess.<clinit>(SendMess.java:5)
at TestSend.main(TestSend.java:6)
这个异常,不知道怎么回事?,刚接触java不久,C++还没接触过?还望大牛们指导。。谢谢!!
------解决方案--------------------你怎么调用的?jni?
------解决方案--------------------1、导入dll到工程的相对路径。
2、生产dll的原生函数。就可以了。
参考如下:
public class TestNative {
private native static int Max(int a, int b);
private native static String GetLicense(String a);
public static void main(String[] args) {
TestNative license = new TestNative();
System.out.println("lll:" + license.getMaxNum());
System.out.println("hd:" + license.GetLicense());
}
static {
System.loadLibrary("A3");
}
public int getMaxNum(){
return Max(4, 5);
}
public String GetLicense(){
return GetLicense("");
}
}
------解决方案--------------------有两种方式吧,有JNI,有JNA,JNA的比较方便店,本来有提供的dll函数接口,你自己写个java接口,就可以匹配这个函数名了,他需要参数,你就传什么进去,JNI的方式比较麻烦,还需要自己写完java接口再生成.h文件,然后再写个.cpp文件来实现...不过jni的性能明显比jna的要好很多,具体的你可以到我的博客看下那个jna的简单例子,找着搬下去就可以了,只是返回类型或者参数类型是复杂的,你自己看看怎么操作这复杂类型