通过IDL-to-Java和CORABA就可以实现

解决方案 »

  1.   

    如果是想问如何在JNI中传递NLS字符,我知道
      

  2.   

    我使用GetStringUTFChars()和 NewStringUTF()不行,连让VC返回jbyteArray,用JAVA重建也不行。
      

  3.   

    请教leonzhao,有C和JAVA的片段代码吗?
      

  4.   

    请教leonzhao,有C和JAVA的片段代码吗?
      

  5.   

    建议将String(包括字母数字汉字等等)变为字节数组,用DataOutputStream的写字节数组的方法发送到VC端,不要用WriteUTF(),他会在发送数据的头自动加上3
    个还是6个字节的(byte)3,(我记不清了),也不要用ObjectOutputStream,它的所有方法都对在发送的数据流前自动加几个字节,其实是可以理解的,为了区分发送的是什么数据格式,当然在头部加上java内部能确认的标示。
    总之,按字节数组发送,就可。
      

  6.   

    对了。忘了提醒:要在发送的String后在发送一个(byte)0,当作Vc的字符串终止符
    try again
      

  7.   

    从Java传入字符到C:
    Java:
    name.getBytes();C/CPP:
    jsize len;
    len = env->GetArrayLength(name);
    jbyte *attrname;
    attrname = (jbyte *) malloc(sizeof(jbyte)*(len+1));
    if ( attrname!= NULL) {
    env->GetByteArrayRegion(name, 0, len, attrname);
    attrname[len] = '\0';
    }
             (char *)attrname就是正确的中文了。从C传字符到java请使用以下函数:jstring WindowsTojstring( JNIEnv* env, char* str )
    {
      jstring rtn = 0;
      int slen = strlen(str);
      wchar_t* buffer = 0;
      if( slen == 0 )
        rtn = env->NewStringUTF( str ); //UTF ok since empty string
      else
      {
        int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 );
        buffer = (wchar_t*)malloc( length*2 + 1 );
        if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) >0 )
          rtn = env->NewString( (jchar*)buffer, length );
      }
      if( buffer )
       free( buffer );
      return rtn;
    }
      

  8.   

    上面的函数帮了我的大忙,非常感谢leonzhao的答复,真的很感激!