Java如何调用C++ DLL库

网友投稿 301 2023-07-13


Java如何调用C++ DLL库

最近做了一个网页端人脸识别的项目,用c++写了人脸识别的算法,但是在网页端要使用java后台,这其中就涉及到了java调用dll的问题。下面是通过查阅相关资料,实现的一个简单例子。

1、第一步,先在Java中新建一个类

如上图,其中注意这句System.loadLibrary("javaCallcpp");,这就是加载dll文件的代码了。然后我们需要dll中实现下面定义的加减乘除方法。

2、编译文件,文件名为Java2cpp.java,首先编译成class文件,如果用的是eclipse,这个文件已经自动生成了,在工程目录下的bin文件夹下。用命令行编译,打开cmd窗口,cd到.java文件所在目录UvtxtoXFX,执行命令javac Java2cpp.java,即生成Java2cpp.class

然后执行命令javah Java2cpp生成Java2cpp.h头文件,但是这一步往往会失败,另一种方法可以成功,进入eclipse项目的目录,进入bin文件夹,执行命令javah -classpath . -jni 包名.类名(com.test.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实现UvtxtoXFX上述方法,代码如下:

#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, inhttp://t 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库的全部叙述,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解Java中的File文件类以及FileDescriptor文件描述类
下一篇:Java中的字符编码问题处理心得总结
相关文章

 发表评论

暂时没有评论,来抢沙发吧~