多平台统一管理软件接口,如何实现多平台统一管理软件接口
438
2023-02-26
Java通过调用C/C++实现的DLL动态库——JNI的方法
由于项目的需要,最近研究了java 调用DLL的方法,将如何调用的写于此,便于日后查阅:
采用的方法是JNI: Java Native Interface,简称JNI,是Java平台的一部分,可用于让Java和其他语言编写的代码进行交互。
下面是从网上摘取的JNI工作示意图:
总体说明:先在JAVA中建立一个类,通过javac生成.class,再由javah生成.h;然后将.h复制到VC下,由VC实现具体函,
并编译通过后生成DLL,将DLL放入JAVA工程中使用,完毕。
下面说说具体步骤(含实例):
1、建java类:装载DLL,声明要使用DLL方法,具体实现由DLL负责;代码如下:
public class Java2cpp
{
static
{
System.loadLibrary("javaCallcpp");
}
public native int DLL_ADD(int a,int b); //加
public native int DLL_SUB(int a,int b); //减
public native int DLL_MUL(int a,int b); //乘
public native int DLL_DIV(int a,int b); //除
public static void main(String args[])
{
int sum = 0;
Java2cpp test http://= new Java2cpp();
sum = test.DLL_ADD(2, 4);
System.out.println("Java call cpp dll result:" + sum);
}
}
2、生成.h文件:cmd 到Java2cpp.java目录下,做如下操作:
第一步:javac Java2cpp.java 生成java2cpp.class
第二步:javah Java2cpp 生成Java2cpp.h头文件,内容如下:
注意:Java2cpp.h这个头文件的内容是不能修改的,否则会出错。
3、制做VC动态库: 创wloNAKN建一个C/C++动态库工程,命名为javaCallcpp,导入java2cpp.h并实现其方法:
#include "Java2cpp.h"
#include "dllApi.h"
JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1ADD(JNIEnv *env, jobject obj, jint a, jint b)
{
int var = 0;
var = DLL_API_ADD(a,b);
return var;
}
JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1SUB(JNIEnv *env, jobject obj, jint a, jint b)
{
int var = 0;
var = DLL_API_SUB(a,b);
return var;
}
JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1MUL(JNIEnv *env, jobject obj, jint a, jint b)
{
int var = 0;
var = DLL_API_MUL(a,b);
return var;
}
JNIEXPORT jint JNICALL Java_Java2cphttp://p_DLL_1DIV(JNIEnv *env, jobject obj, jint a, jint b)
{
int var = 0;
var = DLL_API_DIV(a,b);
return var;
} //此文件完
加DLL_API_ADD()、减DLL_API_SUB()、乘DLL_API_MUL()、除DLL_API_DIV()四个函数在别一个
文件中实现,文件名是dllApi.cpp,实现如下:
int DLL_API_ADD(int a,int b)
{
return (a+b);
}
int DLL_API_SUB(int a,int b)
{
return (a-b);
}
int DLL_API_MUL(int a,int b)
{
return (a*b);
}
int DLL_API_DIV(int a,int b)
{
return (a/b);
} //此文件完
此时工程还编译不过,因为include
4、编译动态库工程:生成javaCallcpp.dll,并将这个动态库复制到java工程目录下:
5、使用DLL:运行java程序,结果如下:
至此,java调用dll已经完成。
总结
以上所述是给大家介绍的Java通过调用C/C++实现的DLL动态库——JNI的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~