zoukankan      html  css  js  c++  java
  • JNI(Java本地方法调用)

    windows:中C/C++是.dll表示调用的动态链接库,而linux是.so表示动态链接库

    JNI(Java Native Interface)的书写步骤

          ·编写带有native声明的方法的java类
          ·使用javac命令编译所编写的java类
          ·使用javah ?jni java类名生成扩展名为h的头文件
          ·使用C/C++(或者其他编程想语言)实现本地方法
          ·将C/C++编写的文件生成动态连接库

    JNI(Java Native Interface)调用中考虑的问题

     1。 java和c是如何互通的?
          其实不能互通的原因主要是数据类型的问题,jni解决了这个问题,例如那个c文件中的jstring数据类型就是java传入的String对象,经过jni函数的转化就能成为c的char*。

     2. 如何将java传入的String参数转换为c的char*,然后使用?
    java 传入的String参数,在c文件中被jni转换为jstring的数据类型,在c文件中声明char* test,然后test = (char*)(*env)->GetStringUTFChars(env, jstring, NULL);注意:test使用完后,通知虚拟机平台相关代码无需再访问:(*env)->ReleaseStringUTFChars(env, jstring, test);

          3. 将c中获取的一个char*的buffer传递给java?
    这个char*如果是一般的字符串的话,作为string传回去就可以了。如果是含有’/0’的buffer,最好作为bytearray传出,因为可以制定copy的length,如果copy到string,可能到’/0’就截断了。

  • 相关阅读:
    UVA 10462 Is There A Second Way Left?(次小生成树&Prim&Kruskal)题解
    POJ 1679 The Unique MST (次小生成树)题解
    POJ 2373 Dividing the Path (单调队列优化DP)题解
    BZOJ 2709 迷宫花园
    BZOJ 1270 雷涛的小猫
    BZOJ 2834 回家的路
    BZOJ 2506 calc
    BZOJ 3124 直径
    BZOJ 4416 阶乘字符串
    BZOJ 3930 选数
  • 原文地址:https://www.cnblogs.com/csxf/p/3725598.html
Copyright © 2011-2022 走看看