windows下如何使用JNI调用C C++函数

本文介绍如何通过JNI让Java程序调用C++代码,包括创建Java类、生成头文件、编写C++代码并编译成DLL,最终在Java程序中调用的过程。

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

1、首先创建java文件Test.java,内容如下:

package com.jni;
publicclassTest {
static { //静态代码块,在JVM加载类的时候执行
System.loadLibrary("Helloworld");
//Helloworld为C++代码生成的dll文件,注意不加文件格式名
}
publicnativevoid output() ;
//output()方法声明,使用native修饰,这个方法将由C++实现
publicstaticvoid main(Stringargs[]){//正常使用main()方法
Testtest=newTest() ;
test.output();
}
}

这里写图片描述

a)编译Test.java文件,生成Test.class Javac–d . Test.java
//编译生成Test.class到当前目录下,自动生成包com.jni
b)编译Test.class文件,生成com_jni_Test.h文件(com jni为包名)
Javah
若编译不成功,使用完整的编译方法:
这里写图片描述
若还是未成功,请自行查阅javah的使用方法
这里写图片描述
Java文件夹目录:
这里写图片描述

2 创建C++文件Helloworld.cpp,内容如下:

(使用MicrosoftVisual Studio 2010)
新建项目Helloworld
这里写图片描述

选择dll项
这里写图片描述

(3)将2.B生成的com_jni_Test.h文件复制到Projects/Helloworld工程存放头文件的文件夹
这里写图片描述
(3)将头文件com_jni_Test.h包含进Helloworld.cpp
这里写图片描述

(4)继续将jni.h和jni_md.h头文件包含进Helloworld.cpp,这两个头文件位于JDK\inlude文件夹下方法如下

a.右键点击项目名,属性
这里写图片描述

b.选择VC++目录—〉包含目录—〉编辑
这里写图片描述

c.添加..jdk\include文件夹和..jdk\include\win32文件夹
这里写图片描述
这里写图片描述
这里写图片描述

d.包含成功后,打开com_jni_Test.h文件,将内容复制到Helloworld.cpp文件中,

注意把冒号删除。
这里写图片描述

Helloworld.cpp代码:

#include"stdafx.h"      
#include"com_jni_Test.h"
//将2.B生成的com_jni_Test.h文件复制到Projects/Helloworld工程存放头文件的文件夹
#include<jni.h>
//将jdk\include\jni.h复制到Projects/Helloworld工程存放头文件的文件夹
#include<stdio.h>
JNIEXPORTvoidJNICALL Java_com_jni_Test_output(JNIEnv *, jobject){
 printf("Hello world") ;
}

A.编译生成Helloworld.dll文件
这里写图片描述

B.将Helloworld.dll复制到..jdk\bin目录下
这里写图片描述

C.执行javac com.jni.Test,屏幕输出Helloworld,成功!
这里写图片描述

以上操作基于Windows XP,如使用其他操作系统可能会出现dll不兼容问题。使用Microsoft Visual Studio 2010 生成的dll文件为32位的要使用32位的JDK。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

继学先生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值