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 );
}

解决方案 »

  1.   

    to aprim: 
       你的程序可以从java中接受到字符串, 但是,不能够接受到中文字符串,
    使用中文似乎要用到中文编码, 具体如何我也不很清楚, 希望有高人指点。 关注............
      

  2.   

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #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]
      

  3.   

    jni.h 文件都在你的<jdk_home>/include 文件夹下
    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 下
    编译时在你的编译器里面也把这两个文件导入即可
      

  4.   

    可不可以在java代码中用UTF-8转换中文字符串,在传给c程序,
    我试了一下,但是只能传一个中文字符,后面的字符不见了,怎么回事?
      

  5.   

    to; 木头鸟你是怎么把汉字传过去?我直接传使得java中的一个汉字在c中变成两个字。。不知你怎么用,还能传过去1个字,能否告诉我?
      

  6.   

    我是将字符串转化为utf-8编码传过去的
    utf-8(还是-7?)是vc中的编码方式
      

  7.   

    我现在可以传过去只是麻烦些:const jchar* chr;
    chr=(*env)->GetStringChars(env, str, NULL);这样chrvs中存放的是中文字符串,不过不能直接打印我想拷贝到字符数组中,就可以了,不知你怎么认为?
      

  8.   

    这种错误我也碰到过,是编码问题引起的.
    因为JAVA的默认编码是16位的Unicode,如果本地调用的对象使用的是8位的编码方式,那传进去一定是乱码了,反过来也一样.
    解决的办法是把二者的编码强制转换成统一的.
    如:new String("需转换的目标文本串","GB2312");即把原本是Unicode编码的自符串转换成传
    GB2312传递进本地调用的对象中.
      

  9.   

    JNIEXPORT void JNICALL Java_MyNative_showParms0
      (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);
    }