JNI学习------C语言调用Java

这篇博客介绍了在C/C++中使用JNI调用Java方法的完整流程,包括初始化虚拟机、获取类、调用方法等步骤。作者通过一个简单的示例程序,演示了在VC6.0下编译和运行JNI代码时可能遇到的问题,如jni.h找不到、jvm.lib缺失、jvm.dll加载失败等,并提供了详细的解决办法,如修改VC设置、调整JDK安装路径、设置环境变量等。最后,文章提供了一个成功的运行示例及源代码下载链接。
摘要由CSDN通过智能技术生成

最近项目中需要使用JNI,所以研究了一下,其中遇到过不少问题,总结一下,让遇到同样问题的人可以得到解决。

在C/C++中调用Java的方法一般分为五个步骤:初始化虚拟机、获取类、获取类的方法、创建类对象、调用方法和退出虚拟机。

下面写一个小程序测试一下:

Java代码:

package jni.test;

public class Demo {

	public static int COUNT = 8;

	public String msg;
	private int[] counts;

	public Demo() {
		this("缺省构造函数");
	}

	public Demo(String msg) {
		System.out.println("<init>:" + msg);
		this.msg = msg;
		this.counts = null;
	}

	public String getMessage() {
		return msg;
	}

	public int[] getCounts() {
		return counts;
	}

	public void setCounts(int[] counts) {
		this.counts = counts;
	}

	public void throwExcp() throws IllegalAccessException {
		throw new IllegalAccessException("exception occur.");
	}
}

上面的代码很好理解,我相信你能看的懂,我就不说了。

下面是C语言代码,里面有注释,这里先不详细说明,主要先跑起来再说:

#include <stdio.h>
#include <jni.h>
#include <stdlib.h>
#include <iostream.h>
int main() {
	// 定义用到的变量
	int res;
	JavaVM *jvm;
	JNIEnv *env;
	JavaVMInitArgs vm_args;
	JavaVMOption options[3];
	vm_args.version;
	
	// 设置初始化参数
	options[0].optionString = "-Djava.compiler=NONE";
	// classpath有多个时,用";"分隔,UNIX下以":"分割。
	options[1].optionSt
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值