java如何引用库_Java如何调用C++DLL库

java如何引⽤库_Java如何调⽤C++DLL库
最近做了⼀个⽹页端⼈脸识别的项⽬,⽤c++写了⼈脸识别的算法,但是在⽹页端要使⽤java后台,这其中就涉及到了java调⽤dll的问题。下⾯是⼩编通过查阅相关资料,实现的⼀个简单例⼦。
1、第⼀步,先在Java中新建⼀个类
如上图,其中注意这句System.loadLibrary("javaCallcpp");,这就是加载dll⽂件的代码了。然后我们需要dll中实现下⾯定义的加减乘除⽅法。
2、编译⽂件,⽂件名为Java2cpp.java,⾸先编译成class⽂件,如果⽤的是eclipse,这个⽂件已经⾃动
⽣成了,在⼯程⽬录下的bin⽂件夹下。⽤命令⾏编译,打开cmd窗⼝,cd到.java⽂件所在⽬录,执⾏命令javac Java2cpp.java,即⽣成Java2cpp.class
然后执⾏命令javah Java2cpp⽣成Java2cpp.h头⽂件,但是这⼀步往往会失败,另⼀种⽅法可以成功,进⼊eclipse项⽬的⽬录,进⼊bin ⽂件夹,执⾏命令javah -classpath . -jni 包名.类名(st.jni.Java2cpp),然后⽣成了com_test_jni_Java2cpp.h
3、在VS中新建项⽬win32项⽬,命名为:TestJNI第⼆步选择如下:
4、把第⼆步⽣成的头⽂件拷进项⽬⽂件夹,然后导⼊。
5、实现头⽂件中的⽅法:
(1)新建头⽂件dllApi.h,代码如下:
#include "com_test_jni_Java2cpp.h"
int DLL_API_ADD(int a, int b);
int DLL_API_SUB(int a, int b);
int DLL_API_MUL(int a, int b);
int DLL_API_DIV(int a, int b);
(2)新建dllApi.cpp实现上述⽅法,代码如下:
#include "stdafx.h"
#include
#include "dllApi.h"
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);
炉灶节能器}
(3)在TestJNI.cpp中添加代码实现com_test_jni_Java2cpp.h⽅法,添加完之后代码如下:// TestJNI.cpp : 定义 DLL 应⽤程序的导出函数。钨杆
//
#include "stdafx.h"
#include "TestJNI.h"
#include "com_test_jni_Java2cpp.h"
#include "dllApi.h"
// 这是导出变量的⼀个⽰例
TESTJNI_API int nTestJNI=0;
// 这是导出函数的⼀个⽰例。
TESTJNI_API int fnTestJNI(void)
{
return 42;
}
泡沫模具
// 这是已导出类的构造函数。
// 有关类定义的信息,请参阅 TestJNI.h
CTestJNI::CTestJNI()
{
return;
}
JNIEXPORT jint JNICALL Java_com_test_jni_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_com_test_jni_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_com_test_jni_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_com_test_jni_Java2cpp_DLL_1DIV(JNIEnv *env, jobject obj, jint a, jint b){
int var = 0;
var = DLL_API_DIV(a, b);
return var;
}
(4)⽣成dll,在项⽬⽂件夹下的Debug⽂件夹内可以到TestJNI.dll,但是因为我们在Java⾥要求dll名为JavaCallcpp,所以此时把项⽬重命名为JavaCallcpp,然后重新⽣成JavaCallcpp。【这⼀步⽣成会失败,按照如下添加路径】
6 调⽤⽅法
把第五步⽣成的JavaCallcpp.dll拷进JRE安装路径下的bin⽂件夹内,运⾏java程序即可。结果如下:净化水体
以上所述是⼩编给⼤家介绍的Java如何调⽤C++ DLL库的全部叙述,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对脚本之家⽹站的⽀持!中央空调控制

本文发布于:2024-09-22 01:28:48,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/215567.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实现   件夹   添加   命令   导出   识别   希望   定义
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议