Android将“.c”后缀名改为“.cpp”时java调用native失败及“error: base operand of '->' has non-pointer type '_JNIEnv'


现象“.c”后缀名改为“.cpp”时java调用native失败

解决加入“extern "C"”。

现象“error: base operand of '->' has non-pointer type '_JNIEnv'”错误。

解决将“(*env)->NewStringUTF(env, "HelloWorld from JNI !");”改为“env->NewStringUTF("HelloWorld from JNI !")”。

例子:

Cpp代码
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<android/log.h>
  4. #include<jni.h>
  5. #ifdef__cplusplus
  6. extern"C"
  7. {
  8. #endif
  9. jintJava_com_duicky_MainActivity_add(JNIEnv*env,jobjectthiz,jintx,jinty)
  10. {
  11. //该方法为打印的方法
  12. __android_log_print(ANDROID_LOG_INFO,"JNIMsg","GetParam:x=%dy=%d",x,y);
  13. intiRet=x+y;
  14. returniRet;
  15. }
  16. jstringJava_com_duicky_MainActivity_getString(JNIEnv*env,jobjectthiz)
  17. {
  18. jstringstrRet=env->NewStringUTF("HelloWorldfromJNI!");
  19. returnstrRet;
  20. }
  21. #ifdef__cplusplus
  22. }
  23. #endif

更多相关文章

  1. [置顶] Android系统安全之旅 第1章 编译Android程序的方法
  2. Android使背景灯(Brightness)高亮的方法
  3. android spinner自动弹出列表,设置title,TtextView不换行自动截取
  4. Android 获取控件高度宽度三种方法,防止0的出现
  5. android获取控件的几种方法
  6. Android 获取手机屏幕大小两种方法

随机推荐

  1. Android中BroadcastReceiver的运用
  2. android 入门不顺啊,解压android_gingerbr
  3. Android(安卓)Binder IPC分析
  4. Android(安卓)中不同项目共用通用库Modul
  5. 用Eclipse开发与调试纯粹的Android(安卓)
  6. Android源代码加入SDK,在程序中查看andro
  7. Android中Handler Runnable与Thread的区
  8. 基于android的Socket通信
  9. Canvas和Drawable
  10. Android弹幕实现:基于B站弹幕开源系统(1)