java jni 的问题
这个是java里的接口:
public native int ReadSms(int sId, String sNo, String sCon, String sTime);
JNI里的实现:
JNIEXPORT jint JNICALL Java_util_MessageOperation_ReadSms
(JNIEnv *env, jobject obj, jint sId, jstring sNo, jstring sCon, jstring sTime){
return ReadSms( sId, jstringTostring(env,sNo),jstringTostring(env,sCon),jstringTostring(env,sTime));
//return 0;
};
这个是jstringTostring方法:
char* jstringTostring(JNIEnv* env, jstring jstr)
{
char* rtn = NULL;
jclass clsstring = env->FindClass("java/lang/String");
jstring strencode = env->NewStringUTF("utf-8");
jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray barr = (jbyteArray)env->CallObjectMethod(jstr, mid, strencode);
jsize alen = env->GetArrayLength(barr);
jbyte* ba = env->GetByteArrayElements(barr, JNI_FALSE);
if (alen > 0)
{
rtn = (char*)malloc(alen + 1);
memcpy(rtn, ba, alen);
rtn[alen] = 0;
}
env->ReleaseByteArrayElements(barr, ba, 0);
return rtn;
}
然后return ReadSms( sId, jstringTostring(env,sNo),jstringTostring(env,sCon),jstringTostring(env,sTime));
这一句 的这个readSms这个方法是别人给的dll里的接口就是这个:
extern "C" _declspec(dllexport) __stdcall int ReadSms(int sId, char * sNo, char * sCon, char * sTime);
最后问题就出在在java里面调ReadSms 方法的时候就会出问题...求高手帮我解决一下,我是小白,不太懂.....