JNI 调用C++代码 并在C++代码中调用Java传递进来的接口
来源:互联网 发布:淘宝高仿大牌女包推荐 编辑:程序博客网 时间:2024/06/05 22:32
1、编写Java代码
1.1、编写CallbackBehaviour
package com.diqye.jni.callback;public interface CallbackBehaviour {public void callback(String name, int age);}
1.2、编写测试类Test
package com.diqye.jni.callback;public class Test {static{System.loadLibrary("callback");}public native void run(CallbackBehaviour callbackBehaviour);public static void main(String[] args) {new Test().run(new CallbackBehaviour() {public void callback(String name, int age) {System.out.println("DLL 传递过来的名字 " + name);System.out.println("DLL 传递过来的年龄" + age);}});}}
2、命令行运行javah -jni fileName使生成头文件
3、配置C++ 使之包含%java_home%\include和%java_home%\include\win32目录
参考:具体的编译器具体设置,我这里使用的是DEVc++ 配置 G++
4、编写C++代码实现Java的本地代码
第二步生成的头文件/* DO NOT EDIT THIS FILE - it is machine generated */#include实现头文件声明的方法/* Header for class com_diqye_jni_callback_Test */#ifndef _Included_com_diqye_jni_callback_Test#define _Included_com_diqye_jni_callback_Test#ifdef __cplusplusextern "C" {#endif/* * Class: com_diqye_jni_callback_Test * Method: run * Signature: (Lcom/diqye/jni/callback/CallbackBehaviour;)V */JNIEXPORT void JNICALL Java_com_diqye_jni_callback_Test_run (JNIEnv *, jobject, jobject);#ifdef __cplusplus}#endif#endif
#include#include #include "com_diqye_jni_callback_Test.h"using namespace std;JNIEXPORT void JNICALL Java_com_diqye_jni_callback_Test_run (JNIEnv* env, jobject javaSelf, jobject callback){ cout<<"c++ code start execute"< GetObjectClass(callback); //获得callback对象中特定方法callback的id jmethodID methodId; methodId=env->GetMethodID(cls_objClass,"callback","(Ljava/lang/String;I)V"); if(methodId){ cout<<"调用方法失败"<<endl; } //调用callback对象的特定方法callback cout<<"执行env->CallObjectMethod(callback,methodId,name,21);"<<endl; jstring name = env->NewStringUTF("diqye"); env->CallObjectMethod(callback,methodId, name,21); cout<<"c++ code execute end"<<endl;}
5、编译成Dll放到共享库中( 一般为Path所指定的路径)并运行
我这边能看到正确的效果 在C++中往Java里传递中文会出现乱码情况- JNI 调用C++代码 并在C++代码中调用Java传递进来的接口
- 通过JNI接口在Android中调用C/C++代码
- window下利用JNI在java代码中调用c/c++接口
- JNI(三)、java代码传递int、String、int[] 并 调用C 代码
- 使用JNI在C中调用java代码
- 使用JNI在java中调用C代码
- 在java中调用c/c++代码的方法(jni)
- 在java中调用c/c++代码的方法(jni)
- 在java中调用c/c++代码的方法(jni)
- 在C/C++中调用Java代码
- Android NDK(JNI)学习总结一:Java代码中申明native函数-Java调用C函数,并在C函数中访问java类和方法、属性
- 使用JNI,让java调用c代码
- jni 使用java 调用C代码
- jni-使用c代码调用java文件
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- 利用ssh + proxytunnel 突破内网防火墙
- (13)-TCP坚持定时器,TCP保活定时器
- Nlog
- HreoWinGauge2.0组件集应用示例----文字水印
- c语言静态变量、静态函数和函数可重入
- JNI 调用C++代码 并在C++代码中调用Java传递进来的接口
- TCP三次握手及四次挥手总结
- This template depends on the Android Support library
- 区间重合判断(编程之美2.19)
- 【python】获取5ige网站音乐的下载地址–python版
- ENVI/IDL波段运算
- opengl在64位下的配置
- CSSE7030 Assignment 2
- 网络编程2