char * ch="Hello,world";不知道怎么传进入jchar*这个参数位置?
看到一种方法是new出一个jchar *p=new jchar[n];p++=ch++;....类似的做法:把指针指向char的buffer块。要new内存,效率太低,不知道有没有替代方法?
btw我觉得这里好像懂JNI的人不多啊?
10 个解决方案
#1
别考虑效率的问题,JNI的效率就是很低的。jchar*和char*可以直接造型使用
另外你用NewString出来的东西Java应该取得乱码(长度不对)。应该用NewUTFString。这样至少保证英文传递正常。
传递中文的话看这里:
http://www.csdn.net/expert/topic/879/879400.xml
千万别给我分!!很重要!!别给我加分!!
另外你用NewString出来的东西Java应该取得乱码(长度不对)。应该用NewUTFString。这样至少保证英文传递正常。
传递中文的话看这里:
http://www.csdn.net/expert/topic/879/879400.xml
千万别给我分!!很重要!!别给我加分!!
#2
懂JNI的C时代的高手大多不来这个“破”论坛。
千万别给我分!!很重要!!别给我加分!!
千万别给我分!!很重要!!别给我加分!!
#3
另外谁想出来的new一个jchar*的方法去将char*的内容复制过来?(这种方法……汗……)
千万别给我分!!很重要!!别给我加分!!
千万别给我分!!很重要!!别给我加分!!
#4
千万别给我分!!很重要!!别给我加分!!
?
呵呵,那好。不过能不能加给我自己啊?
?
呵呵,那好。不过能不能加给我自己啊?
#5
new出来那个方法是我从IBM网站看到的,应该还是专业人士写的,我直接用char传给jchar编译通不过.
#6
不过我现在发现一个很奇怪的现象,调用java的c++代码做成一个子函数,然后char *ch传参数进去这个子函数作为被转化的字符串,我发现非得在这个子函数里面同样定义一个同样大小的buffer,比如是char tmp[size];//这个size必须和你参数传进来的ch一样的长度,否则它就会出错:内存不能read。加上这个定义tmp之后就ok。什么毛病啊?
#7
没读懂,把程序放上来看看吧。
jchar* str1;
str1= ......;
char* str2;
str2 = (char*)str1;
jchar* str1;
str1= ......;
char* str2;
str2 = (char*)str1;
#8
另外还是不小心变成恶心的星星,现在可以随便加分了……
#9
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");
}
这样的错误真没有理由。
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");
}
这样的错误真没有理由。
#10
Tojstring是什么?另外你有debug过是在哪里出错(不加哪句话)
C忘的真多啊,汗……
C忘的真多啊,汗……
#1
别考虑效率的问题,JNI的效率就是很低的。jchar*和char*可以直接造型使用
另外你用NewString出来的东西Java应该取得乱码(长度不对)。应该用NewUTFString。这样至少保证英文传递正常。
传递中文的话看这里:
http://www.csdn.net/expert/topic/879/879400.xml
千万别给我分!!很重要!!别给我加分!!
另外你用NewString出来的东西Java应该取得乱码(长度不对)。应该用NewUTFString。这样至少保证英文传递正常。
传递中文的话看这里:
http://www.csdn.net/expert/topic/879/879400.xml
千万别给我分!!很重要!!别给我加分!!
#2
懂JNI的C时代的高手大多不来这个“破”论坛。
千万别给我分!!很重要!!别给我加分!!
千万别给我分!!很重要!!别给我加分!!
#3
另外谁想出来的new一个jchar*的方法去将char*的内容复制过来?(这种方法……汗……)
千万别给我分!!很重要!!别给我加分!!
千万别给我分!!很重要!!别给我加分!!
#4
千万别给我分!!很重要!!别给我加分!!
?
呵呵,那好。不过能不能加给我自己啊?
?
呵呵,那好。不过能不能加给我自己啊?
#5
new出来那个方法是我从IBM网站看到的,应该还是专业人士写的,我直接用char传给jchar编译通不过.
#6
不过我现在发现一个很奇怪的现象,调用java的c++代码做成一个子函数,然后char *ch传参数进去这个子函数作为被转化的字符串,我发现非得在这个子函数里面同样定义一个同样大小的buffer,比如是char tmp[size];//这个size必须和你参数传进来的ch一样的长度,否则它就会出错:内存不能read。加上这个定义tmp之后就ok。什么毛病啊?
#7
没读懂,把程序放上来看看吧。
jchar* str1;
str1= ......;
char* str2;
str2 = (char*)str1;
jchar* str1;
str1= ......;
char* str2;
str2 = (char*)str1;
#8
另外还是不小心变成恶心的星星,现在可以随便加分了……
#9
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");
}
这样的错误真没有理由。
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");
}
这样的错误真没有理由。
#10
Tojstring是什么?另外你有debug过是在哪里出错(不加哪句话)
C忘的真多啊,汗……
C忘的真多啊,汗……