本篇文章综合了jni百度词条以及其他网友的知识,如有不对请指正。
工具:eclipse, 命令行,vc++6.0
过程:
1. 在eclipse中编写代码:
package testbasic;
public class HelloWorld {
public native void displayHelloWorld();//
static {
System.loadLibrary("HelloWorld");//
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
工程结构如图:
2.生成.h文件
先找到编译后的.class文件位置。比如,我的在
然后在命令行生成.h文件,
javah -classpath . -jni testbasic.HelloWorld
然后就会生成一个.h文件,留着它一会儿用。
生成的.h文件内容是这样的:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class testbasic_HelloWorld */
#ifndef _Included_testbasic_HelloWorld
#define _Included_testbasic_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: testbasic_HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_testbasic_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
3.在vc++6.0中生成.dll文件(似乎叫动态链接库)
第一步,创建工程,
第二步,编写.cpp文件
函数名要和.h文件中保持一致
// HelloWorld.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "jni.h"
#include "testbasic_HelloWorld.h"
//#include otherheaders
JNIEXPORT void JNICALL
Java_testbasic_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Helloworld!\n");
return;
}
需要注意的是需要把用到的.h文件放到 D:\360安全浏览器下载\Microsoft Visual Studio2\VC98\Include文件夹下,
用到的.h文件有,
(这几个在jdk的include文件夹下可以找到),还有刚才的生成的.h文件。
第三步,执行
首先打开StdAfx.h,按f7执行;
然后打开HelloWorld.cpp, 按f7执行;这样.dll文件就成功生成了
4.把这个.dll文件放到jdk的bin文件夹下, 然后回到eclipse,
运行HelloWorld.java, 就能输出结果了。
我在这个过程中遇到了很多的问题,很多是在网上找答案,不知不觉的解决了;
其中有一个问题是.dll文件的位置问题,直到昨晚12点多才在网上找到了答案,感谢码农先生网友的文章,http://blog.csdn.net/FOR_CHINA2012/article/details/9307361。
剩下的如果有问题,大家再讨论吧,百度其实还是可以的,真能找的到答案。
快放假了,大家新年快乐!