vc2010开发JNI的DLL调用接口

vc2010开发JNI的DLL调用接口

java 调用DLL的方法,是跨语言开发的一个重要的实例,可以实现多种语言混合编程。

JNI:Java Native Interface,简称JNI,是Java平台的一部分,可用于让Java和其他语言编写的代码进行交互。

JNI工作示意图:

 

      Java Native Interface (JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计 的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

      使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java 虚拟机实现下。

一、编写java程序:
这里用最简单的命令行来编写java代码,以HelloWorld为例。

在命令行下 

copy con HelloWorld.java

然后把下面的代码贴入进下面的代码。
class HelloWorld {
public native void displayHelloWorld();

static {
System.loadLibrary("HelloWorld");
}

public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}

最后按ctrl+Z保存好源文件。

二、生成.h文件及编译.class

编译class
javac HelloWorld.java

生成.h  文件
javah -jni HelloWorld
生成的头文件的内容:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    displayHelloWorld
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject);方法,然后在我们的本地方法里面实现这个方法,也就是说我们在编写C/C++程序的时候所使用的方法名必须和这里的一致)。

三、编写DLL

      通过VS2010生成DLL。新建DLL项目(项目名称helloworld) -> 添加相应的头文件目录(包括jni.h, jni_md.h,HelloWorld.h) -> 编译 -> 生成方案。之后,则在工程的Debug目录下生成相应的dll文件(此处为helloworld.dll)。

建立dll工程:

‘选择DLL

添加附加文件的路径,主要是jni.h jni_md.h包含的文件路径,需要将jni.h(该文件可以在%JAVA_HOME%/include文件夹下面找到)文件引入,因为在程序中的JNIEnv、 jobject等类型都是在该头文件中定义的;另外在第2行需要将HelloWorld.h头文件引入(我是这么理解的:相当于我们在编写java程序的 时候,实现一个接口的话需要声明才可以,这里就是将HelloWorld.h头文件里面声明的方法加以实现。当然不一定是这样)

然后添加的如下的代码:

// HelloWorld.cpp : 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h"
#include "HelloWorld.h"

JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) 
{
    printf("Hello world!\n");
    return;

 

编译dll工程文件,将 HelloWorld.dll  和 helloworld.class放在同一个路径下,可以进行测试运行

四、运行程序
命令行窗口中输入:java  HelloWorld ,则输出Hello World!

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jyl_sh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值