天下

记录修行的印记

JAVA通过JNI调用本地dll

JAVA通过JNI调用本地dll 

一、JAVA中所需要做的工作 
Java工程Example01
第一步:创建Java类,类名:TestJni 在里面定义一个本地方法(用native关键字修饰的方法)
package NeoWay;
public class TestJni 
{
    static {
            System.loadLibrary("neoway");
    }     
    public native static void sayHello();
}

第二步:生成javah 说需要的.class文件
在DOS窗口中进入工程所在的src文件夹:
javac NeoWay\TestJni.java

第三步:使用javah命令生成本地方法的C++头文件 
@rem javah 包.类
javah NeoWay.TestJni  
在DOS窗口中进入工程所在目录,然后执行javah NeoWay.TestJni命令,执行完之后就会在当前目录生成一个后缀名为.h的头文件

第四步:新建VC++的dll工程(附件选项:空项目),工程名为:neoway
将相关的路径加入VC++的include
C:\Program Files\Java\jdk1.7.0_80\include
C:\Program Files\Java\jdk1.7.0_80\include\Win32
将生成的NeoWay_TestJni.h引入该VC工程

NeoWay_TestJni.h内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class NeoWay_TestJni */

#ifndef _Included_NeoWay_TestJni
#define _Included_NeoWay_TestJni
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     NeoWay_TestJni
 * Method:    sayHello
 * Signature: ()V
 
*/
JNIEXPORT void JNICALL Java_NeoWay_TestJni_sayHello
  (JNIEnv *, jclass);


#ifdef __cplusplus
}
#endif
#endif

新建一个 NeoWay_TestJni.cpp,内容如下:
#include "NeoWay_TestJni.h"
JNIEXPORT void JNICALL Java_NeoWay_TestJni_sayHello (JNIEnv *, jclass)
{
    printf("Java_NeoWay_TestJni_sayHello() Entry\r\n");
}

//Example01
import NeoWay.TestJni;
public class Example01 
{
    public static void main(String[] args) 
    {
        System.out.println("main() entry()");
        TestJni.sayHello();
    }
}


第五步:测试运行
将VC++工程生成neoway.dll拷贝至Java工程Example01目录
javac Example01.java
java Example01

输出:
main() entry()
Java_NeoWay_TestJni_sayHello() Entry

posted on 2015-12-04 11:48 天下 阅读(375) 评论(0)  编辑 收藏 引用 所属分类: Java


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2013年3月>
242526272812
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(4)

随笔分类(378)

随笔档案(329)

链接

最新随笔

搜索

最新评论