前言

由于学期作业的要求,笔者需要开发一个语音识别系统。出于对Java的热爱,笔者非常想用Java来写上层程序(前台+数据库的三层),又要用到Microsoft Speech SDK,所以在这些条件下,产生了用Java调用DLL的需求。经过几天的查资料和摸索,写成了这篇教程。虽说网上的相关教程不少,但是也没有一篇博文能完全解决我的问题。今借此地补充之。

环境

windows7 + JDK1.8 + NetBeans8.0 + visual studio 2010

正文

1.我们在NetBeans中新建项目,取名TestNativeCode,建包com.test.nativecode,建主类TestNativeCode。代码如下
package com.test.nativecode;

public class TestNativeCode {
static{
System.loadLibrary("NativeCode");
}
public native void saySomeThing();
public static void main(String args[]){
TestNativeCode test = new TestNativeCode();
test.saySomeThing();
}
}

1.1如图一,右击源文件,选择编译文件。


图一

好了,编译好的 .class已经安静地在 build\classes\com\test\nativecode里等我们了。


2.打开cmd,进入包所在目录。以笔者为例,包所在文件夹为E:\WorkPlace\NetBeansWorkPlace\TestNativeCode\build\classes。cmd中命令如下。
e:
cd WorkPlace\NetBeansWorkPlace\TestNativeCode\build\classes

2.1利用javah生成.h头文件,命令如下。

javah com.test.nativecode.TestNativeCode

然后,我们得到生成好的.h头文件,如图二

图二

3.在Visual Studio 2010中新建win32项目, 取名 CppNativeCode,选择DLL,如图三。
图三

4. 将2.1生成好的.h头文件加入vs2010的工程头文件文件夹里。以笔者为例,将com_test_nativecode_TestNativeCode.h 放入到 E:\WorkPlace\vs2010WorkPlace\CppNativeCode\CppNativeCode里。

4.1 在vs2010中,右击项目的头文件,头文件, 添加, 现有项。选择 com_test_nativecode_TestNativeCode.h。如图四。
图四

4.2 然后打开com_test_nativecode_TestNativeCode.h 我们看到,显示找不到 jni.h。解决方法如下,把Java\JDK\include目录下的 jni.h拷贝至 E:\WorkPlace\vs2010WorkPlace\CppNativeCode\CppNativeCode 内即可, 修改#include <jni.h> 为#include "jni.h"。如图五。

图五

4.3 将Java\jdk1.8.0_05\include\win32 下的 jni_md.h 拷贝至 E:\WorkPlace\vs2010WorkPlace\CppNativeCode\CppNativeCode 。

5. 如果你是32位机可以跳过这步。64位机需要将vs2010的解决方案平台修改为64位,选择生成 ---配置管理器。如图六。

图六

5.1 选择平台---新建---选择x64。如图七。

图七

6. 编译--生成。以笔者为例,在E:\WorkPlace\vs2010WorkPlace\CppNativeCode\Debug 生成了 CppNativeCode.dll 。
6.1 将 CppNativeCode.dll 放入相应的 Path 路径中,以笔者为例,放入 C:\Program Files\Java\jdk1.8.0_05\bin 中即可。
7.运行NetBeans中的项目即可。以笔者为例,效果如图八。

参考资料







版权声明:本文为博主原创文章,未经博主允许不得转载。

Java利用JNI调用C/C++写成的DLL的更多相关文章

  1. JAVA使用JNI调用C++动态链接库

    JAVA使用JNI调用C++动态链接库 使用JNI连接DLL动态链接库,并调用其中的函数 首先 C++中写好相关函数,文件名为test.cpp,使用g++编译为DLL文件,指令如下: g++ -sha ...

  2. [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so

    0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...

  3. [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so

    0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...

  4. Java通过JNI调用dll详细过程(转)

    源:Java通过JNI调用dll详细过程 最近项目有这样一个需求,在已有的CS软件中添加一个链接,将当前登录用户的用户名加密后放在url地址中,在BS的login方法里通过解密判断,如果为合法用户则无 ...

  5. ubuntu下Java通过JNI调用C

    下面看一个实例,如下: public class TestJNI { static { System.loadLibrary("diaoyong"); // 程序在加载时,自动加载 ...

  6. JAVA 利用JNI加密class文件/自定义ClassLoader 类

    利用 JNI 对bytecode 加密.不影响java程序员的正常开发.09年的时候写的,现在拿出来晒晒————————————————————————————混淆才是王道,如果混淆再加密就更酷了.. ...

  7. Java通过jni调用动态链接库

    (1)JNI简介 JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).从Java1.1开始,JNI标准成为java ...

  8. Java通过JNI调用C

    Java调用C有多种方式,本文介绍笔者最近的学习过程,避免今后再犯类似的错误. 首先,Java肯定是调用C的动态链接库,即通过编译器编译后的dll/so文件. 下面介绍gcc编译dll的方法. 一般情 ...

  9. JAVA的JNI调用

    由于JNI调用C和调用C++差不多,而且C++中可以混合写C代码,所以这里主要是写关于JNI调用C++的部分. 一般步骤: 先是写普通的Java类,其中包括本地方法调用.  然后编译这个Java类,调 ...

随机推荐

  1. Amazon RDS 上的 Microsoft SQL Server » 导入和导出 SQL Server 数据库

    导入和导出 SQL Server 数据库 Amazon RDS 支持使用完整备份文件 (.bak 文件) 对 Microsoft SQL Server 数据库进行本机备份和还原.您可以在单个便携式文件 ...

  2. 如何用html把文本框外观格式设为只显示底部的横线

    html把文本框外观格式设为只显示底部的横线 <style> input[type='text']{background:none;border:none;border-bottom:1p ...

  3. win10 修改root文件

    1.进入Win10系统的hosts文件所在位置,我们直接输入C:\Windows\System32\Drivers\etc后回车就可以打开了,右键hosts文件,选择属性 2.点击hosts属性对话框 ...

  4. java中,null值可以被强制转换为任何类型

    java中,null值可以被强制转换为任何类型

  5. uvm设计分析——callback

    uvm_callback,设计者在进行class的function设计时,有意留下的一些hook,总是遍历某个pool中的对象: 使用者在使用时,将实现添加到某个pool中: callback中,最重 ...

  6. uvm设计分析——report

    uvm_report实现中的类图,如下: 1)uvm_component均从uvm_report_object extend而来,其中定义了report_warning,error,info,fata ...

  7. html5 手机端 通讯录 touch 效果

    不说那么多直接上代码. <html> <head> <meta http-equiv="Content-Type" content="tex ...

  8. 【转】基于Python的接口测试框架实例

    下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧   背景 最近公司在做消息推送,那么自然就会产生很多接口,测试 ...

  9. 查看完整的 Unicode 字符集

    https://unicode-table.com/cn/ 这个链接是我想要查的 格式如下图 先放这里收藏,我也不知道怎么搜索

  10. python递归练习:生成一个n级深度的字典,例如:[1,2,3,4,5,6] 可以生成{1: {2: {3: {4: {6: 5}}}}},写一个函数定义n级

    结果#encoding = utf-8#题目:#生成一个n级深度的字典,例如:[1,2,3,4,5,6] 可以生成{1: {2: {3: {4: {6: 5}}}}},写一个函数定义n级a=[1,2, ...