由于先学习了王泽佑(传智播客)的jni调用java函数,所以先写了c/C++中调用java中的函数,没有先写C/C++中访问java中的属性
代码:
package cn.edu.wtu;
public class TestNative{
static {
System.loadLibrary("test_native");
}
double max (double num1 , double num2){
return num1 > num2 ? num1 : num2;
}
public native void sayHello();
public static void main (String [] args){
TestNative test = new TestNative ();
test.sayHello();
}
}
生成cn_edu_wtu_TestNative_sayHello.h
头文件
将其拷贝到vs2005的项目下:
vs2005中的代码:
// test_native.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "cn_edu_wtu_TestNative.h"
#include <iostream>
using namespace std;
#include <jni.h>
JNIEXPORT void JNICALL Java_cn_edu_wtu_TestNative_sayHello(JNIEnv *env, jobject obj){
jclass cls_test_native = env->GetObjectClass(obj);
//获取java的类
jmethodID id_max = env->GetMethodID(cls_test_native , "max" ,"(DD)D");
//获取java的函数ID,(DD)D是java的函数签名
jdouble max_value = env->CallDoubleMethod(obj , id_max , 3.14 , 3.15);
//调用java中的函数,并返回值
cout<<max_value<<endl;
//输出
}
编译:成功之后,将test_native.dll文件拷贝到java的bin目录下,注意是jdk的bin下面
运行java程序