java调用C++方法,怎么传递指针参数,
例如bool Data(double *a,double *b,int c),指针怎么处理,请各位大神不吝赐教。

解决方案 »

  1.   

    我只想说,对于c而言是指针参数,对于java就是对象引用,有区别的。比如java传递c一个java对象,这个是可以的,c需要去解析java对象就可以获取数据
    https://blog.csdn.net/venusic/article/details/52302578
      

  2.   

    你说的这种是C代码是自己编写的,我的是别人给的C文件,让我调用,并不符合JNI的格式。
      

  3.   

    Java 调用 C / C ++ 方法 , 只能 传入 Java 对象 , String, 数组 , 基础数据类型 , 看下 jni.h 文件中的类型定义  
    你定义 JNI 方法的时候 尽量使用上述类型 ,bool Data(double *a,double *b,int c), 定义成 bool Data(double a,double b,int c) 类型的 ; 
    如果是别人给的 C 文件 , Java 里面调用 , 肯定调用不到 , 因为 C 的方法必是 Java_包名_类型_方法名( 参数 ) 才能直接调用 , 你自己写一个 C 文件 , 在这个 C 中 引用 别人给的 头文件 , 然后调用 你的这个 方法 bool Data(double *a,double *b,int c) ; 
      

  4.   

    您的意思是我自己写一个符合JNI格式的C文件,然后去包含别人给的头文件,再调用他的方法吗?还有您说定义成bool Data(double a,double b,int c) ,这是不对的吧,指针传递的是很多数据,但是您现在这种值传递是一个数值。
      

  5.   

    1. 方法一 : 自己写一个 C 文件 , 在这个 C 中 引用 别人给的 头文件 , 然后调用 你的这个 方法 bool Data(double *a,double *b,int c) ; 
    2. 方法二 : 修改 JNI 方法 , bool Data(double *a,double *b,int c) , 定义成 Java_包名_类型_Data(JNIEnv *env, jobject a, 你自己的参数) 
     
    3. 关于你说的参数问题 : 参数是你自己要考虑的问题 , double * 就两种情况, 数组 或者 单个的 浮点地址 , 我不知道 你把这个参数当什么用 , 上面只是打个比方 , 举例说明一下 Java 可以往 C 里传入的参数类型 , 不是说 要你修改成 这个 ;