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 方法的时候就会出问题...求高手帮我解决一下,我是小白,不太懂.....
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 方法的时候就会出问题...求高手帮我解决一下,我是小白,不太懂.....
...全文
相关推荐
Java处理 Jni中的汉字问题
总结来说,JNI处理汉字问题的关键在于理解编码之间的转换以及确保数据在Java和C/C++之间以正确的编码格式传输。通过选择合适的方法进行编码转换,可以有效地避免乱码问题。
java 通过jni查看windows的CPU利用率的问题
标题“Java通过JNI查看Windows的CPU利用率的问题”涉及到的是Java编程语言如何利用Java Native Interface (JNI) 这一技术来获取Windows操作系统的CPU使用情况
解析Java的JNI编程中的对象引用与内存泄漏问题
内存泄漏是程序中常见的问题,对于Java编程而言,内存泄漏可以发生在Java堆(Java Heap)或JVM的本地内存(nativememory)中。
jsp,java中文乱码问题另类解决方案,jni加密、解密编码
本篇文章将深入探讨这个问题,并提出一种另类的解决方案——利用JNI(Java Native Interface)进行加密和解密操作来规避乱码问题。首先,我们需要理解为什么会出现中文乱码。
关于java加载JNI之后无法切换输入法的资料。
当Java程序加载了JNI库后,可能会遇到输入法无法切换的问题,这通常是由于系统资源管理或者线程上下文切换导致的。下面将详细探讨这个问题及可能的解决方案。


