JNI 简单使用

本篇文章综合了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
剩下的如果有问题,大家再讨论吧,百度其实还是可以的,真能找的到答案。

快放假了,大家新年快乐!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值