java jni 的问题

u010140887 u010140887 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
这个是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 方法的时候就会出问题...求高手帮我解决一下,我是小白,不太懂.....
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
u010140887
Java 51,407 成员 86,126 内容