jni c运行java字符串,通过JNI将C ++字符串发送到Java
我正在構建Android應用程序的項目的C
方面。我需要一些信息(通過字符串和字符串數組)傳遞給Java應用程序(通過JNI)。我以前從未做過,相反方向的人沒有C的經驗,并承認他們不能真正提供幫助。
我確實找到了以下代碼(從這里開始)
#include
#include "ArrayHandler.h"
JNIEXPORT jobjectArray JNICALL Java_ArrayHandler_returnArray (JNIEnv *env, jobject jobj){
jobjectArray ret;
int i;
char *message[5]= {"first","second","third","fourth","fifth"};
ret= (jobjectArray)env->NewObjectArray(5,env->FindClass("java/lang/String"),env->NewStringUTF(""));
for(i=0;i<5;i++) {
env->SetObjectArrayElement(ret,i,env->NewStringUTF(message[i]));
}
return(ret);
}
但這對我來說毫無意義。通常,我不確定如何將其合并到程序的C
++端,而且我無法確切了解其工作原理。代碼是否在執行該return(ret);行時發出消息?還是在for循環中執行該行期間?
理想情況下,我希望將字符串/字符串數組“實時”發送到行中,而不是在函數末尾發送,這樣我就不必合并新函數。
我找到的代碼可以為我想要的工作(經過一些修改)嗎?我正在尋找的東西甚至可能嗎?如果是這樣,我該怎么辦?
編輯/更新: 花了整整一天時間研究JNI和術語,我想我未能正確傳達我在這里想要實現的目標以及對@jogabonito的回答/答復的評論。
話雖如此。我正在處理的代碼是針對IM客戶端的,該客戶端需要將消息和狀態更新推送到Android
Java應用程序(通過JNI),以便Android應用程序不會輪詢更新。我設法學習了如何設置Java代碼的函數來調用requrest信息。但是,我不知道如何在傳入新消息或狀態信息(Jabber節字符串)時將其推送到Java代碼。我在如何執行此操作時所見過的所有代碼(例如,參見下文)似乎都需要從Java代碼中獲取信息(env,類,methodid等)。
對于不是調用該函數的java代碼而是我的c ++代碼的人來說,這怎么可能是不可能的。任何解釋/幫助將不勝感激。
#include
#include
#include
jstring Java_the_package_MainActivity_getJniString( JNIEnv* env, jobject obj){
jstring jstr = (*env)->NewStringUTF(env, "This comes from jni.");
jclass clazz = (*env)->FindClass(env, "com/inceptix/android/t3d/MainActivity");
jmethodID messageMe = (*env)->GetMethodID(env, clazz, "messageMe", "(Ljava/lang/String;)Ljava/lang/String;");
jobject result = (*env)->CallObjectMethod(env, obj, messageMe, jstr);
const char* str = (*env)->GetStringUTFChars(env,(jstring) result, NULL); // should be released but what a heck, it's a tutorial :)
printf("%s\n", str);
return (*env)->NewStringUTF(env, str);
}
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的jni c运行java字符串,通过JNI将C ++字符串发送到Java的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存选择全攻略,8GB够不够?频率和时序
- 下一篇: 硬件超频引发电脑爆炸!警示与建议曝光