别考虑效率的问题,JNI的效率就是很低的。jchar*和char*可以直接造型使用另外你用NewString出来的东西Java应该取得乱码(长度不对)。应该用NewUTFString。这样至少保证英文传递正常。传递中文的话看这里:http://www.csdn.net/expert/topic/879/879400.xml千万别给我分!!很重要!!别给我加分!!

解决方案 »

  1.   

    懂JNI的C时代的高手大多不来这个“破”论坛。千万别给我分!!很重要!!别给我加分!!
      

  2.   

    另外谁想出来的new一个jchar*的方法去将char*的内容复制过来?(这种方法……汗……)千万别给我分!!很重要!!别给我加分!!
      

  3.   

    new出来那个方法是我从IBM网站看到的,应该还是专业人士写的,我直接用char传给jchar编译通不过.
      

  4.   

    不过我现在发现一个很奇怪的现象,调用java的c++代码做成一个子函数,然后char *ch传参数进去这个子函数作为被转化的字符串,我发现非得在这个子函数里面同样定义一个同样大小的buffer,比如是char tmp[size];//这个size必须和你参数传进来的ch一样的长度,否则它就会出错:内存不能read。加上这个定义tmp之后就ok。什么毛病啊?
      

  5.   

    没读懂,把程序放上来看看吧。jchar* str1;
    str1= ......;
    char* str2;
    str2 = (char*)str1;
      

  6.   

    Ok,程序架构是这样的:
    void send(char *MsgText)
    {.......
    .......//创建jvm等操作
    char szText0[10]; //the bigger size than MsgText
                //这个szText0没什么用处,但是没有它程序出错:内存不能读
    jstring jMsgText=Tojstring(env,MsgText);
    result=env->CallStaticBooleanMethod(cls, mid,jMsgText);
    ........
    }
    void main()
    {
    send("Hello");
     }
    这样的错误真没有理由。
      

  7.   

    Tojstring是什么?另外你有debug过是在哪里出错(不加哪句话)C忘的真多啊,汗……