Java如何调用C++ DLL库_java

 最近做了一个网页端人脸识别的项目,用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 包名.类名(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实现上述方法,代码如下:

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索dll
, java调用c++
java调用dll方法
java 调用c dll、java调用c语言dll、java调用c dll的速度、lua调用c 动态库 dll、java 调用c 库,以便于您获取更多的相关知识。

时间: 2024-09-27 08:45:01

Java如何调用C++ DLL库_java的相关文章

java 如何调用mwrf32.dll

问题描述 java 如何调用mwrf32.dll mwrf32.dll据说是ic读卡器的通用开发dll, 调用这个里边的方法都需要传递一个设备标识的字段, 这个字段是怎么获取的,我的环境是window8. 希望做过类似读卡器开发的大神帮助一下 解决方案 http://www.open-open.com/home/space-37924-do-blog-id-5681.html 解决方案二: java 调用user32.dll 锁定电脑使用ctypes调用kernel32.dll中的函数10.4.

封装-js调用ocx dll库(存在依赖库dll)出现问题

问题描述 js调用ocx dll库(存在依赖库dll)出现问题 最近遇到一个问题,我使用vc6封装的 atl-- dll的ocx控件, 名字为 test.dll (内部就一个add接口), 通过js调用,可以调用成功, 然后我又封装了一个 ocx的dll,名字为a.dll, a依赖于b.dll(这个就是一个动态链接库), 注册a.dll之后,再用js调用,单步调试浏览器就会报错:"对象不支持此属性和方法",这个是什么原因导致的? 解决方案 最有可能的原因,控件没有部署好,或者安全性问题

java中调用GDAL DLL的实现方法_java

步骤:1.编译GDAL(编译过程忽略).2.将编译过后的动态链接库拷贝到{JAVA_HOME}\jre\bin目录下,如下图:   3.将编译过后的gdal.jar引入java工程,测试调用,代码如下: 复制代码 代码如下:       @Override    protected boolean doIsAvailable() throws Throwable {        System.loadLibrary("gdaljni");        return true;   

java-Java如何调用windows语音库

问题描述 Java如何调用windows语音库 可否帮解答一下,Java如何调用windows语音库?百度上面的cameltts.jar和cameltts.dll如何得来?有没有例子借我参考参考? 解决方案 TIMIT语音库

jna dll-java 用jna调用dll库问题

问题描述 java 用jna调用dll库问题 昨天接手一个新项目,是关于java调用dll的,用jna实现,在我本机上运行成功,今天换了台电脑,就出现了EXception in main thread java.lang.UnsatisfiedLinkError UNable to load library..........请问有谁知道原因啊?急. 解决方案 dll已经放到system32 下了,还是一样出错 解决方案二: 目测是需要加载的dll位置不对 你再看看啦 解决方案三: 使用JNA通

dll调用-jdk1.6下用jna调用dll库报错,换成jdk1.7成功

问题描述 jdk1.6下用jna调用dll库报错,换成jdk1.7成功 使用jkd1.6提示java.lang.UnsatisfiedLink,换成jdk1.7就可以了,请问有没有熟悉的大神知道是什么原因 解决方案 http://bbs.csdn.net/topics/390509805

动态链接库-java 如何调用dll 数据接口

问题描述 java 如何调用dll 数据接口 如题: 现在我有个dll 数据接口库.. 求一份java 调用 dll 数据接口demo 或者给个博客地址.. 谢谢... 还有一个问题就是.. 请问使用什么工具可以查看到dll内的 接口内容.. 解决方案 在Windows中实现Java调用DLL(转载)

Java怎么调用c/c++写的库

问题描述 Java怎么调用c/c++写的库 接口供应商给我们发来aa.h , aa.dll 文件 还有一个api文档.向各位大神求救,搞了一天都不懂,真心痛苦 解决方案 java通过jni可以调用C++写的dllhttp://www.cnblogs.com/xiehy/p/3365682.html 解决方案二: http://blog.csdn.net/cskerrydn/article/details/4719521 解决方案三: 你都有API文档了,就是你JNI的时候设置好对应的DLL名称,

C# 制作Com组件:java调用.net DLL的方法

本文将详细为大家介绍一个java调用.net DLL的方法,以实现特殊的客户的特殊要求:"在Java项目中必须使用其提供的用.net写的DLL加密机制!" 环境与工具: ◆.net framework 3.5 C# ◆java jdk1.5, Tomcat 5.5 ◆jacob-1.15-M3 实现例子: 一.C# 制作Com组件 新建一个Class 项目,取名TestCom 代码 using System;  using System.Collections.Generic;  us