我在做一个java接口用JNI调用本地的C写的动态连接库c的函数接口是这样的
int test(int dd, struct in_addr sub_ip_addr, char* sub_name, long* total_bytes, datetime* starttime)
我对C不是很熟,写C的人对此接口的描述如下:
int dd, struct in_addr sub_ip_addr, char* sub_name
这三个参数是输入参数 long* total_bytes
datetime* starttime
这两个是输出参数
这个函数的意思我明白,但是我做了这么长时间的java没有写过在参数里还有输出的??
我被他们说晕了,我现在也糊涂了,还有
struct in_addr sub_ip_addr 这个参数,是个结构体
我用java掉的时候应该传什么类型阿,晕
请各位高人指点,在先等,明白了马上结贴

解决方案 »

  1.   

    还有这种方法
    int test(int dd, struct in_addr sub_ip_addr, char* sub_name, long* total_bytes, datetime* starttime)
    都已经定义成int的了,不是只能返回int的么,怎么还可以返回什么输出参数阿
    而且还不是一个,我晕
      

  2.   

    c通过操作指针不就可以改变参数指向的值了吗?long* total_bytes
    datetime* starttimetotal_bytes变量指向的是一个long的值,starttime变量指向的是一个datetime结构楼主ms没有学过c啊,你这样的c函数是很难使用jni调用的,自己重新写吧
      

  3.   

    我也没有办法啊,c是别人写的,所以我也很难办
    要是按照我的意思,我自己用java全部就写了,就不用这么麻烦了,上面认为这是对的
      

  4.   

    我在做一个java接口用JNI调用本地的C写的动态连接库c的函数接口是这样的
    int test(int dd, struct in_addr sub_ip_addr, char* sub_name, long* total_bytes, datetime* starttime)
    我对C不是很熟,写C的人对此接口的描述如下:
    int dd, struct in_addr sub_ip_addr, char* sub_name
    这三个参数是输入参数 long* total_bytes
    datetime* starttime
    这两个是输出参数
    这个函数的意思我明白,但是我做了这么长时间的java没有写过在参数里还有输出的??
    我被他们说晕了,我现在也糊涂了,还有
    struct in_addr sub_ip_addr 这个参数,是个结构体
    我用java掉的时候应该传什么类型阿,晕
    请各位高人指点,在先等,明白了马上结贴
      

  5.   

    yingge(盼胖) ( ) 信誉:100
    麻烦你是详细解释下,我只是上学的时候学过C
    没有做过C的东西
    那什么样的方法才能被jni调用阿 有什么补救的方法么
      

  6.   

    那什么样的方法才能被jni调用阿?这个你去看看jni的文档吧,冗长啊有什么补救的方法么?想不到了,如果光是struct in_addr 的话好办,有两个指针汗
      

  7.   

    看错了前面的当我没说过会c吗?应该是可以调用的,不过要自己写一个c程序封装那个test函数,把所有的参数放在一个类里,当然包括结构体,然后调用自己写的那个封装了test函数的c函数,然后解析所有参数,在自己的函数中调用test函数。
      

  8.   

    我把问题缩小一点范围,请问
    int test(int dd, struct in_addr sub_ip_addr, char* sub_name, long* total_bytes, datetime* starttime)
    这个接口中 char* sub_name 这个我在java里定义成String 的 在C的接口中怎么转化呢我只知道在接口中要写  jstring sub_name 可是要怎么转化呢
    const char *theStr;
    theStr=(*env)->GetStringUTFChars(env,name ,0);
    这样编译就报错,不知道什么原因阿