void MAC(unsigned char *msg, int length, unsigned char* key,unsigned char* result);
这个是在 c中的函数,已经编译为dll了,该文件可以修改我要用jni来调用这个函数我定义的 java方法是 public native static String MAC(String msg, int length, String key, String result);
不知道这个行不行,还是用 byte[]来代替 String我用javah生成 .h 头文件,并在*.cpp 中加入用javah生成的方法,然后来调用c中的mac方法,所以我需要给MAC函数传值JNIEXPORT jstring JNICALL Java_Wofadesm_MAC (JNIEnv *env, jclass cls, jstring msg1, jint jles1, jstring key1, jstring result1) {
char *msg;
char *key;
char *result;
msg = (char*)(*env).GetStringUTFChars(msg1, 0);
key = (char*)(*env).GetStringUTFChars(key1, 0);
result = (char*)(*env).GetStringUTFChars(result1, 0);
        MAC();//该处我该如何写传入的参数,另外还要返回 jstring类型的值
return ...;
}
 

解决方案 »

  1.   

    http://blog.chinaunix.net/u1/38994/showart_1099528.html希望对你有帮助。
      

  2.   

    记得原来也遇到过问题,就是在字符串包含中文的情况下会遇到问题,最好转成byte[]更方便。但如果不包含中文,应该问题不大。
      

  3.   

    第一个问题:第二个问题:
    你这里好像写的有点问题。
    msg = (char*)(*env).GetStringUTFChars(msg1, 0);
    key = (char*)(*env).GetStringUTFChars(key1, 0);
    result = (char*)(*env).GetStringUTFChars(result1, 0); GetStringUTFChars()方法第一个参数必须是env的.msg = (char*)(*env).GetStringUTFChars(env,msg1, 0);
    key = (char*)(*env).GetStringUTFChars(env,key1, 0);
    result = (char*)(*env).GetStringUTFChars(env,result1, 0); 返回:
    return (*env)->NewStringUTF(env,strupr(result));