1. 编译java:javac JNIDemo.java

2. 编译JNI:gcc -I/usr/lib/jvm/java-1.8.0-openjdk-amd64/include/ -I/usr/lib/jvm/java-1.8.0-openjdk-amd64/include/linux/ -fPIC -shared -o libnative.so native.c

      export LD_LIBRARY_PATH=.

3. 执行:java JNIDemo

字段描述符取巧办法:

1. javac JNIDemo.java

2. javah -jni JNIDemo

生成一个头文件:JNIDemo.h

字符串的传递:

 const jbyte *cstr;
    cstr = (*env)->GetStringUTFChars(env, str, NULL);
    if(cstr == NULL)
    {
        return NULL;
    }
    printf("Get string from java: %s\n", cstr);

(*env)->ReleaseStringUTFChars(env, str, cstr);

return (*env)->NewStringUTF(env, "return from c");

数组的传递:

jint *carr;
    jint i, sum = 0;
    carr = (*env)->GetIntArrayElements(env, arr, NULL);
    if(carr == NULL)
    {
        return 0;
    }

for(i = 0; i < (*env)->GetArrayLength(env, arr); i++)
    {
        sum += carr[i];
    }

(*env)->ReleaseIntArrayElements(env, arr, carr, 0);

return sum;

传入数组参数,返回数组参数:

jint *carr;
    jint *oarr;
    jintArray rarr;
    jint i, n = 0;
    carr = (*env)->GetIntArrayElements(env, arr, NULL);
    if(carr == NULL)
    {
        return 0;
    }

n = (*env)->GetArrayLength(env, arr);

oarr = malloc(sizeof(jint) * n);
    if(oarr == NULL)
    {
        (*env)->ReleaseIntArrayElements(env, arr, carr, 0);
        return 0;
    }

for(i = 0; i < n; i++)
    {
        oarr[i] = carr[n - 1 - i];
    }

/* crate jintArray */
    rarr = (*env)->NewIntArray(env, n);
    if(rarr == NULL)
    {
        return 0;
    }

(*env)->SetIntArrayRegion(env, rarr, 0, n, oarr);

free(oarr);
    
    return rarr;

最新文章

  1. 1306. Sorting Algorithm 2016 12 30
  2. Mysql 列转行统计查询 、行转列统计查询
  3. event相关
  4. 理解SQL Server中的权限体系(上)----主体
  5. [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码
  6. Java 并发:Executors 和线程池
  7. Android核心分析 之九Zygote Service
  8. JsRender系列demo(6)-无名
  9. bzoj2324营救皮卡丘
  10. Linux编程之《守护进程》
  11. [BZOJ 1028] [JSOI2007] 麻将 【枚举+贪心判断】
  12. .NET常用的扩展方法整理
  13. Error与Exception的区别
  14. TDD单元测试驱动
  15. 阅读Facebook POP框架 笔记(一)
  16. Swing-JRadioButton用法-入门
  17. 百度病了,必应挂了,Yandex疯了。
  18. unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度
  19. Java的JDK下StringBuffer与StringBuilder的区别
  20. Bootstrap学习目录

热门文章

  1. S3C2440 IIS操作 uda134x录放音
  2. Atitit.ati&amp;#160;&amp;#160;str&amp;#160;&amp;#160;字符串增强api
  3. eclipse工具栏sdk和avd图标
  4. python(32)- 模块练习Ⅱ:使用正则表达式实现计算器的功能
  5. Java集合01----ArrayList的遍历方式及应用
  6. TNS-01201: Listener cannot find executablen 错误
  7. start-dfs.sh 和 start-all.sh的区别
  8. CentOS 7.2 , YUM 方式安装VSC
  9. 【TensorFlow-windows】(一)实现Softmax Regression进行手写数字识别(mnist)
  10. C++代码书写模板 -- 如何判断函数类型