如何在VC和JAVA间传递汉字,哪个晓得? 通过IDL-to-Java和CORABA就可以实现 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果是想问如何在JNI中传递NLS字符,我知道 我使用GetStringUTFChars()和 NewStringUTF()不行,连让VC返回jbyteArray,用JAVA重建也不行。 请教leonzhao,有C和JAVA的片段代码吗? 请教leonzhao,有C和JAVA的片段代码吗? 建议将String(包括字母数字汉字等等)变为字节数组,用DataOutputStream的写字节数组的方法发送到VC端,不要用WriteUTF(),他会在发送数据的头自动加上3个还是6个字节的(byte)3,(我记不清了),也不要用ObjectOutputStream,它的所有方法都对在发送的数据流前自动加几个字节,其实是可以理解的,为了区分发送的是什么数据格式,当然在头部加上java内部能确认的标示。总之,按字节数组发送,就可。 对了。忘了提醒:要在发送的String后在发送一个(byte)0,当作Vc的字符串终止符try again 从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;} 上面的函数帮了我的大忙,非常感谢leonzhao的答复,真的很感激! java1.6的API中文版 想知道,面向对象到底和非面向对象有什么区别!! 新手问题:javabean 用法问题? 刚参加笔试回来,给点题目大侠们看看 哪位知道Eclipse的开发插件都在什么地方有的下载?比如开发jsp/servlet的插件? java中的事件模型怎么理解呀? java与B/S的困惑 大虾帮忙啊!高分请教,在线等待,立即给分... 请各位帮帮忙,高分相赠 java 运行问题 ◎◎◎◎◎ 谁知道哪里有《JAVA实例技术手册》一书下载? ◎◎◎◎ JBuilder下怎样生成可执行文件?
个还是6个字节的(byte)3,(我记不清了),也不要用ObjectOutputStream,它的所有方法都对在发送的数据流前自动加几个字节,其实是可以理解的,为了区分发送的是什么数据格式,当然在头部加上java内部能确认的标示。
总之,按字节数组发送,就可。
try again
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;
}