JNI开发实例

1、  jni开发步骤如下:

a)         d:/temp/jni目录下建立com/skymobi/dll,三个目录,即包的目录,在该包下建一个HelloWorld.java,具体代码如下:

package com.skymobi.dll;

 

public class HelloWorld {

  public native void displayHelloWorld();

  public native int retNum();

  static {

      System.loadLibrary("hello");

  }

  public static void main(String[] args) {

      new HelloWorld().displayHelloWorld();

      int liRet = new HelloWorld().retNum();

      System.out.println("返回值="+liRet);

  }

}

b)        进入DOS命令,cdd:/temp/jni,编译javac com/skymobi/dll/HelloWorld.java,生成class文件;再生成头文件javah com.skymobi.dll.HelloWorld,会生成.h文件,文件名com_skymobi_dll_HelloWorld.h    class文件打包, ,生成skymobi_dll_v1.0.jar

c)         根据头文件,结合C生成hello.dll,具体步骤见下面说明;将hello.dll复制到tomcat/lib目录下(或者放到path中)。

d)        经过上面步骤jni调用开发完成了,在项目中,只要将skymobi_dll_v1.0.jar导入,然后调用HelloWorld类中的方法就OK了。

 

2、  vc生成dll文件的过程:

 

文件-->新建-->工程选项卡--win32 Dynamic-Link Library,在工程名称中输入名称例如:hello,点确定--》一个空的DLL工程(E)--》完成--》确定。接着再点击文件--》新建--》文件选项卡:C++ Source File--》输入文件名:例如hello,确定进入hello.cpp编辑窗口,

复制一下代码:

#include <jni.h>

#include "com_skymobi_dll_HelloWorld.h"

#include <stdio.h>

JNIEXPORT void JNICALL Java_com_skymobi_dll_HelloWorld_displayHelloWorld

(JNIEnv *, jobject){

    printf("hello chalin.cai!/n");

    return;

}

JNIEXPORT jint JNICALL Java_com_skymobi_dll_HelloWorld_retNum

(JNIEnv *, jobject){

    return 123;

}

 

 

在编译生成hello.dll之前,你需要先将java_home目录下的include文件夹下的jni.h 和你刚才编译好的com_skymobi_dll_HelloWorld.h放到VC98/include文件夹下,然后进行编译。不然vc++会找不到头文件而报错。编译之后你就可以在你的VC项目文件夹下的hello项目的debug文件夹下看到我们生成好的hello.dll 呵呵 这就是我们在Java类中调用的dll文件。

 

3、  项目调用例子

将第一步生成的jar导入

public class TestDLL {

    public static void main(String[] args) {

       HelloWorld hello = new HelloWorld();

       System.out.println(hello.retNum());

    }

}

这样结果就出来了,转载将标明转至caiqiling博客,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值