JAVA调用C++ dll库
2018-01-16 00:00
169 查看
JNI方式:(不建议使用)
1.java中的native类,编写java测试类;
2.使用javac -test.java 生成 test.class文件;
上层目录中 javah -classpath -jni xxx.test
生成 xxx_test.h
3..h文件导入 vs中,.cpp中实现具体类,并生成dll文件
4.java项目中添加dll文件,调用接口;
https://jingyan.baidu.com/article/456c463b49eb470a583144b9.html
JNA方式:(简单方便,优先使用)
1.编写.h文件,如下:test.h
extern "C" _declspec(dllexport) int add(int first, int second);
这里值得注意的地方是必须写(extern "c"的声明,不然到时候使用java的jna是不可能匹配到这个方法的,很明显会抛出异常java.lang.UnsatisfiedLinkError: Error looking up function 'add':这个文件相当于我们的java中的interface,你可以这样理解
2.编写.cpp文件,如下test.cpp
#include "test.h"
int add(int a, int b){
return a + b;
}
3.生成对应的dll文件:test.dll
4.继承library类,Native.loadLibrary()加载dll文件,如下:
package demo;
import com.sun.jna.Library;
import com.sun.jna.Native;
public interface Add extends Library {
public final Add add = (Add)Native.loadLibrary("Test", Add.class); //Test放在同目录下,如果是一个插件,不如插件plugin文件夹,下面是Test.dll,可写成plugin/Test;java项目中默认是放在bin目录下
int add(int a, int b);
}
5.测试
package demo;
public class TestCase {
public static void main(String[] args) {
System.out.println(Add.add.add(1, 2));
}
}
http://blog.csdn.net/qq_20202715/article/details/52129810
http://blog.csdn.net/jimmy609/article/details/19076557
注:1.java报错未读取到dll文件,一般是Native.loadLibrary("Test", Add.class);加载的路径有问题;
2.java报错未加载到function,一般是调用dll文件中的参数有问题,或者方法名有问题;
3.java报错 %1不是应用程序,一般是jdk位数不匹配;
1.java中的native类,编写java测试类;
2.使用javac -test.java 生成 test.class文件;
上层目录中 javah -classpath -jni xxx.test
生成 xxx_test.h
3..h文件导入 vs中,.cpp中实现具体类,并生成dll文件
4.java项目中添加dll文件,调用接口;
https://jingyan.baidu.com/article/456c463b49eb470a583144b9.html
JNA方式:(简单方便,优先使用)
1.编写.h文件,如下:test.h
extern "C" _declspec(dllexport) int add(int first, int second);
这里值得注意的地方是必须写(extern "c"的声明,不然到时候使用java的jna是不可能匹配到这个方法的,很明显会抛出异常java.lang.UnsatisfiedLinkError: Error looking up function 'add':这个文件相当于我们的java中的interface,你可以这样理解
2.编写.cpp文件,如下test.cpp
#include "test.h"
int add(int a, int b){
return a + b;
}
3.生成对应的dll文件:test.dll
4.继承library类,Native.loadLibrary()加载dll文件,如下:
package demo;
import com.sun.jna.Library;
import com.sun.jna.Native;
public interface Add extends Library {
public final Add add = (Add)Native.loadLibrary("Test", Add.class); //Test放在同目录下,如果是一个插件,不如插件plugin文件夹,下面是Test.dll,可写成plugin/Test;java项目中默认是放在bin目录下
int add(int a, int b);
}
5.测试
package demo;
public class TestCase {
public static void main(String[] args) {
System.out.println(Add.add.add(1, 2));
}
}
http://blog.csdn.net/qq_20202715/article/details/52129810
http://blog.csdn.net/jimmy609/article/details/19076557
注:1.java报错未读取到dll文件,一般是Native.loadLibrary("Test", Add.class);加载的路径有问题;
2.java报错未加载到function,一般是调用dll文件中的参数有问题,或者方法名有问题;
3.java报错 %1不是应用程序,一般是jdk位数不匹配;
相关文章推荐
- Java如何调用C++ DLL库
- Java通过JNI调用C++的DLL库
- java调用C++ DLL库方法
- Java通过JNI调用C++的DLL库
- JNI的学习(C++调用Java函数)
- [2014.1.31] Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
- Android C++调用JAVA
- paip.java 调用c++ dll so总结
- Java语言深入学习之Java调用C/C++的过程
- JAVA中调用C/C++生成的DLL
- 在Java中调用C/C++本地库
- JNI 调用C++代码 并在C++代码中调用Java传递进来的接口
- Java调用C/C++
- [cocos2dx]在cocos2dx中通过Jni实现Java与C++的互相调用(二)
- Windows 下java调用C++ dll动态链接库
- Liunx java-eclipse下C++的so库的调用(下)
- android jni (2) java与c++相互调用
- C/C++调用java---JNI常用函数
- java 用JNA方法调用C++动态链接库
- Java 调用c/c++程序