jni 调用java类方法_JNI之C++调用Java类

Java类需要在虚拟机上运行,也就不是原生的,同样.NET Framework也不是原生的。JNI也就是Java原生接口。关于JNI的规范,以及为什么要使用它,它能做些什么,都在http://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/jniTOC.html里记述着。

JNI是规范,它规定了虚拟机的接口,而把具体的实现留给开发者。

JVM的实现不是唯一的,目前存在很多种Java虚拟机,Sun Hotspot,IBM JDK,还有HP的,Kaffe等等。最流行的就是Sun的Hotspot,最复杂的就是IBM JDK,这是IBM的一贯作风。本文不讨论JVM的实现,只关注JNI。如果您安装了Sun的JDK,您就能在[JAVA_HOME]/include目录下找到jni.h。这个头文件就是虚拟机的唯一接口,你可以调用它声明的函数创建一个JVM。

在说明C++调用Java类之前,我想先演示一下如果编写Java Native Method。

1.编写带有Native方法的Java类

Java代码 icon_copy.gificon_star.png

spinner.gif

org.colimas.jni.test;

public class JniTest{

static { System.loadLibrary("JniTestImpl"); } //JVM调用JniTestImpl.dll

public JniTest(){

}

//原生方法

public native void print(String str);

/** *//**

* @param args

*/

public static void main(String[] args){

JniTest test=new JniTest();

test.print("hello JVM"); //调用原生方法

}

}

org.colimas.jni.test;

public class JniTest{

static { System.loadLibrary("JniTestImpl"); } //JVM调用JniTestImpl.dll

public JniTest(){

}

//原生方法

public native void print(String str);

/** *//**

* @param args

*/

public static void main(String[] args){

JniTest test=new JniTest();

test.print("hello JVM"); //调用原生方法

}

}

2.使用javah生成c语言头文件。

javah -jni org.colimas.jni.test.JniTest

目录里多了一个org_colimas_jni_test_JniTest.h文件,打开文件,内容如下:

Java代码 icon_copy.gificon_star.png

spinner.gif

* DO NOT EDIT THIS FILE - it is machine generated */

#include

/**//* Header for class org_colimas_jni_test_JniTest */

#ifndef _Included_org_colimas_jni_test_JniTest

#define _Included_org_colimas_jni_test_JniTest

#ifdef __cplusplus

extern "C" {

#endif

/**//*

* Class: org_colimas_jni_test_JniTest

* Method: print

* Signature: (Ljava/lang/String;)V

*/

JNIEXPORT void JNICALL Java_org_colimas_jni_test_JniTest_print

(JNIEnv *, jobject, jstring);

#ifdef __cplusplus

}

#endif

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值