3Java程序JNI调用C++之修改属性调用方法
2011-11-15 13:56
232 查看
java code
c++ code
package com.cloud.nativeTest; /** * 全部应用。 * 测试c++修改Java属性,并且呼叫Java方法 */ public class TestModifyFieldAndCallMethod { public static void main(String[] args) { test(); } private static void test() { System.loadLibrary("CNativeCode"); TestModifyFieldAndCallMethod t = new TestModifyFieldAndCallMethod(); t.callNative(); } /** * 声明调用的为本地代码 */ private native void callNative(); public int num = 10; public void showNumValue() { System.out.println("来自Java:showNumValue()---num值等于::"+num); } public int addValue(int value) { return num+value; } }
c++ code
#include"com_cloud_nativeTest_TestModifyFieldAndCallMethod.h" #include<iostream> using namespace std; JNIEXPORT void JNICALL Java_com_cloud_nativeTest_TestModifyFieldAndCallMethod_callNative(JNIEnv * env, jobject obj) { cout<<"Hello Word"<<endl;//测试环境是否成功 jclass clazz_Java = env->GetObjectClass(obj);//获得要修改的类对象 jfieldID numObj = env->GetFieldID(clazz_Java,"num","I");//获得要修改的属性ID jint num = env->GetIntField(obj,numObj);//通过属性ID获得属性里的默认值 cout<<"来自c++:修改前原来num值等于:"; cout<<num<<endl;//控制台输出原始值 env->SetIntField(obj,numObj,200L);//通过SetIntField给属性设置值 jfieldID numObjTest = env->GetFieldID(clazz_Java,"num","I");//重新获得属性,并查看修改后的值 jint numTest = env->GetIntField(obj,numObjTest); cout<<"来自c++:修改后num值等于:"; cout<<numTest<<endl; jmethodID cshowNumValue = env->GetMethodID(clazz_Java,"showNumValue","()V");//获得要Call的方法对象ID,签名通过javap -s -p com.cloud.nativeTest.TestModifyFieldAndCallMethod获得方法签名 env->CallVoidMethod(obj,cshowNumValue,"()V");//执行无返回值的Call jmethodID caddValue = env->GetMethodID(clazz_Java,"addValue","(I)I"); jint returnValue = env->CallIntMethod(obj,caddValue,100); cout<<"来自c++:调用addValue()方法修改后num值等于:"; cout<<returnValue<<endl; }
相关文章推荐
- JNI进阶一 (C++调用java属性和方法,javap的使用)
- window环境下java程序调用本地方法JNI
- linux下使用jni实现c++调用java程序(5)参考资料总结
- 用JNI进行Java编程---从C/C++程序调用Java代码
- Android JNI-c/c++调用java方法
- cocos2d-x使用jni java调用c++方法(java 调 c++)
- 在java中调用c/c++代码的方法(jni)
- JAVA通过JNI调用c++本地方法dll
- scala和java通过JNI调用C++程序例子
- cocos2d 中使用jni Java 调用 C++ 方法
- Java通过JNI调用本地C/C++程序
- JAVA通过JNI调用C++程序实践
- [2014.1.31] Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
- 从 C/C++ 程序调用 Java 代码 (不是用JNI)
- 利用JNI在vs2010上实现c++调用Java类方法
- 用Swig将c/c++程序转为java代码(使用swig实现java调用c、c++的方法)
- JNI实现Java调用C++程序(Linux 64位)
- linux下使用jni实现c++调用java程序(1)准备工作
- C++和Java的属性访问和方法调用 效率比较
- Java JNI入门篇——C++中调用Java方法