JAVA JNI Demo

本文介绍如何通过JNI让Java调用C++代码并生成DLL文件,包括创建Java类、生成C++所需的头文件、使用Visual C++编译DLL及在Eclipse中配置JNI环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:VC++6.0在虚拟机内运行,Eclipse在win7系统下运行,所以导致截图不一样(传了几次,截图都没上传成功,汗)

主要步骤:

1、创建java类,生成.h文件,供 .cpp 文件调用

2、.h文件在VC++6.0内的存放位置,以及调用jni.h的环境的配置

3、cpp文件的创建和dll的生成

4、生成dll文件在Eclipse中环境的配置



1、在eclipse项目中新建一个TestHello.java,创建Java类TestHello .java

public class TestHello {
     public native  void hello();
     static{
         System.loadLibrary("hello");
    }
    public static void main(String []args){
        new TestHello().hello();
    }
}

2、在命令行内输入 javacTestHello .java 编译生成TestHello .class文件。

      在命令行下使用javah TestHello 命令,生成TestHello .h头文件(就是jni代理stub的接口)。

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

文件-->新建-->工程选项卡--》win32 Dynamic-Link Library,在工程名称中输入名称例如:hello,点确定--》一个空的DLL工程(E)--》完成--》确定。

在弹出的窗口中创建一个空的DLL工程,点击Finish。 

打开项目所在的文件目录,将步骤2中生成的TestHello .h文件复制到Include文件夹下:

 

在VC的菜单上选择Tools-Options…,打开选项对话框。在Directories文件夹,添加上jdk所在文件夹下的include和include/win32文件夹。


接着再点击文件--》新建--》文件选项卡:C++ Source File--》输入文件名:例如hello,确定进入hello.cpp编辑窗口,代码如下:

#include <jni.h>
#include "TestHello.h"
#include <stdio.h>
 JNIEXPORT void JNICALL Java_TestHello_hello(JNIEnv *env,jobject obj)
 {
     printf("success!!\n");
 }

点击VC上的菜单项Build,生成hello.dll。


运行成功后,hello.dll存放在VC项目Debug文件夹中的



4、将hello.dll复制到任何文件夹下,我放在了bin文件夹下。



然后配置eclipse的buildPath,Native library location,默认为空,点击Edit配置,即找到hello.dll所存放的目录




5、点击run as 运行


 

 

 

### JNIDemo.java 示例代码 为了展示如何创建 `JNIDemo.java` 文件并实现 Java Native Interface (JNI),下面提供了一个完整的例子。此文件位于 Eclipse 中名为 `JavaTest` 的项目里,在包 `com.hisign.jni` 下。 #### 创建 HelloJNI 类 首先定义一个简单的 Java 类来调用本地方法: ```java package com.hisign.jni; public class HelloJNI { static { System.loadLibrary("hello"); // 加载本地库 hello.dll 或 libhello.so } public native String sayHello(String name); // 声明本地方法 public static void main(String[] args) { HelloJNI hj = new HelloJNI(); System.out.println(hj.sayHello("World")); // 调用本地方法 } } ``` 这段代码展示了如何声明本地方法以及加载相应的动态链接库[^1]。 #### 编写 C/C++ 代码实现本地函数 接着编写对应的 C/C++ 函数以供上述 Java 方法调用。假设使用的是 Linux 平台,则可以按照如下方式命名源文件为 `hello.c`: ```c #include <jni.h> #include "com_hisign_jni_HelloJNI.h" #include <stdio.h> JNIEXPORT jstring JNICALL Java_com_hisign_jni_HelloJNI_sayHello(JNIEnv *env, jobject obj, jstring input){ const char *str; str = (*env)->GetStringUTFChars(env, input, NULL); printf("Native method called with argument: %s\n", str); char output[80]; sprintf(output,"Hello from C code! Input was '%s'", str); (*env)->ReleaseStringUTFChars(env, input, str); return (*env)->NewStringUTF(env,output); } ``` 该部分实现了之前在 Java 程序中声明过的 `sayHello()` 函数,并返回一条消息给 Java 应用程序。 #### 构建和运行应用程序 完成以上两步之后,还需要编译这些代码并将它们组合在一起形成可执行的应用程序。具体步骤取决于所使用的操作系统环境。对于 Windows 用户来说,通常会生成 `.dll` 文件;而对于 Unix-like 系统(如 macOS 和各种 Linux 发行版),则会产生共享对象(`.so`)形式的目标文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值