JNI编程

为了能够在项目中同时的坚固java和c++的特性,例如底层的硬件由c++操作,上层的应用由java去实现,那么这时就要用到JNI技术。当然,不只是这种单方面的java调用c++可以使用JNI,JNI是提供双向交互的接口,我们可以将java vm嵌入到应用程序中,例如浏览器中运行applet,当浏览器遇到applet标签时,浏览器会将标签内的内容交给java vm解释。

JNI编程----JAVA调用C++动态库

首先我们要将调用dll接口的JAVA类写出来:

JAVA代码如下:

public class HelloJni 
{
   public native void displayHelloJni();
static 
{
System.loadLibrary("helloJni");
  }
  public static void main(String[] args) 
  {
  new HelloJni().displayHelloJni();
  }
}
文件名HelloJni.java,java中类的名字必须和文件名相同。

有了这个java的源码,我们就可以通过javac的指令生成HelloJni.class,再用javah生成头文件,这个头文件是我们在生成动态库时需要的。

头文件是这样的:

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

#ifndef _Included_HelloJni
#define _Included_HelloJni
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloJni
 * Method:    displayHelloJni
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloJni_displayHelloJni
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

我们要根据生成的头文件来写dll,例如上面的这个头文件,我们在dll中就要定义Java_HelloJni_displayHelloJni(JNIEnv*,jobject)这样的接口。

下面是动态库的源代码:

 #include <jni.h>
 #include "HelloJni.h"
 #include <stdio.h>

JNIEXPORT void JNICALL Java_HelloJni_displayHelloJni(JNIEnv *env, jobject obj)
{
   printf("Hello Dynamic Link Library has been calling!\n");
   printf("Java_HelloJni_displayHelloJni method has been executed!\n");
   return;
}
添加完上述代码,我们编译链接,发现根本通过不了,这时我们要将之前生成的HelloJni.h头文件放到源代码的目录下,并且要在工程中包含jni.h,这个头文件是在jdk的include中。包含了这些我们的工程就完成了。可以在command中输入java HelloJni命令进行测试。

这是一个简单的JNI编程,其他的复杂的也都是这样的方式完成的。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

春阳CYang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值