文章目录
  1. 1. 今天花了一上午的时间实践了一下通过JNI调用C/C++程序,遇到BUG也不少,总结如下:
    1. 1.1. 使用到的工具:
    2. 1.2. 第一步:新建eclipse项目
    3. 1.3. 第二步:生成头文件
    4. 1.4. 第三步:实现上述头文件的函数体:
    5. 1.5. 第四步:使用dll

今天花了一上午的时间实践了一下通过JNI调用C/C++程序,遇到BUG也不少,总结如下:

使用到的工具:

  • eclipse
  • visual studio 2013
  • jdk1.7

第一步:新建eclipse项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.duwei.jni;

public class HelloWorld {
/**
* 静态代码块加载C/C++库
*/

static {
System.loadLibrary("ConsoleApplication3");
}
/**
* main函数测试
* @param args
*/

public static void main(String[] args) {
HelloWorld word = new HelloWorld();
word.sayHello();

}
/**
* 所有的native方法都用C/C++实现
*/

public native void sayHello();
}

第二步:生成头文件

  • 在java项目的bin目录下执行如下命令:

    1
    D:\Usersworkspace\Java\bin>javah -classpath . -jni com.duwei.jni.HelloWorld
  • 在bin目录下将生成如下格式的头文件:

    1
    com_duwei_jni_HelloWorld.h

第三步:实现上述头文件的函数体:

  • 打开visual studio 2013

  • 新建Win32 Console Application->next->dll(动态链接库)->finish

  • 打开项目所在文件夹将第二步生成的头文件拖入(实践证明直接再接在vs中拖入会报找不到文件的bug)

  • 右键项目->properties->C/C++->General->Additional Include Directories添加如下:

    1
    2
    3
    4
    1、JDK目录下include文件夹
    C:\Program Files\Java\jdk1.7.0_60\include
    2、JDK目录下include文件夹下的win32
    C:\Program Files\Java\jdk1.7.0_60\include\win32
  • 如下图实现头文件中函数声明的函数体:

注意:如果为64位JDK请将图片上方的标示改为x64

第四步:使用dll

  • 将上述生成的dll放于java项目的根目录,运行->run
文章目录
  1. 1. 今天花了一上午的时间实践了一下通过JNI调用C/C++程序,遇到BUG也不少,总结如下:
    1. 1.1. 使用到的工具:
    2. 1.2. 第一步:新建eclipse项目
    3. 1.3. 第二步:生成头文件
    4. 1.4. 第三步:实现上述头文件的函数体:
    5. 1.5. 第四步:使用dll