JNIEXPORT void JNICALL Java_MyNative_showParms0
(JNIEnv *, jobject, jstring, jint, jboolean);
/////////////////////////////////////////////////////
#include <stdio.h>
#include "MyNative.h"
JNIEXPORT void JNICALL Java_MyNative_showParms0
(JNIEnv *env, jobject obj, jstring s, jint i, jboolean b)
{
const char* szStr = (*env)->GetStringUTFChars( env, s, 0 );
printf( "String = [%s]\n", szStr );
printf( "int = %d\n", i );
printf( "boolean = %s\n", (b==JNI_TRUE ? "true" : "false") );
(*env)->ReleaseStringUTFChars( env, s, szStr );
}
(JNIEnv *, jobject, jstring, jint, jboolean);
/////////////////////////////////////////////////////
#include <stdio.h>
#include "MyNative.h"
JNIEXPORT void JNICALL Java_MyNative_showParms0
(JNIEnv *env, jobject obj, jstring s, jint i, jboolean b)
{
const char* szStr = (*env)->GetStringUTFChars( env, s, 0 );
printf( "String = [%s]\n", szStr );
printf( "int = %d\n", i );
printf( "boolean = %s\n", (b==JNI_TRUE ? "true" : "false") );
(*env)->ReleaseStringUTFChars( env, s, szStr );
}
你的程序可以从java中接受到字符串, 但是,不能够接受到中文字符串,
使用中文似乎要用到中文编码, 具体如何我也不很清楚, 希望有高人指点。 关注............
#include <jni.h>
/* Header for class yanzheng */
#ifndef _Included_yanzheng
#define _Included_yanzheng
#ifdef __cplusplus extern "C" {
#endif
/*
* Class: yanzheng
* Method: Verify
* Signature: (Ljava/lang/String;Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_yanzheng_Verify
(JNIEnv *, jclass, jstring, jstring);
#ifdef __cplusplus
}
#endif
#endif
请问为和编译时在jni.h文件里面出错!!
你的jni.h和jni_md.h文件是哪里来的呢?????
我要在winnt上用的你有吗有的话传给我好吗?谢谢!
[email protected]
jni_md.h在你的<jdk_home>/include/linux文件夹下
编译的时候要把这两个文件加进去, 在linux下编译的语法为:
gcc -shared -I <jdk_home>/include -I <jdk_home>/include/linux -o mynative.c libmynative.so
即可
在winnt下的jni_md.h在<jdk_home>/include/win32 下
编译时在你的编译器里面也把这两个文件导入即可
我试了一下,但是只能传一个中文字符,后面的字符不见了,怎么回事?
utf-8(还是-7?)是vc中的编码方式
chr=(*env)->GetStringChars(env, str, NULL);这样chrvs中存放的是中文字符串,不过不能直接打印我想拷贝到字符数组中,就可以了,不知你怎么认为?
因为JAVA的默认编码是16位的Unicode,如果本地调用的对象使用的是8位的编码方式,那传进去一定是乱码了,反过来也一样.
解决的办法是把二者的编码强制转换成统一的.
如:new String("需转换的目标文本串","GB2312");即把原本是Unicode编码的自符串转换成传
GB2312传递进本地调用的对象中.
(JNIEnv *env, jobject obj, jstring s, jint i, jboolean b)
{
const char* szStr = (*env)->GetStringUTFChars( env, s, 0 );
wchar_t *UNmessage=new wchar_t[LENGTH];//自己定义一个LENGTH
//这个函数可以将UTF8转成UNICODE码,打印出来就不是乱吗了
int LenOfSM1=MultiByteToWideChar(CP_UTF8,0,szStr,-1,UNmessage,LENGTH);
}