#eclipse #jni #java #c #cpp
Есть функция на С (модуль traverser.c): long int Traverser(const char * sTraversingRoot) { long int nCount; struct stat rStatBuf; time_t nTime; char sActualPath[512]; PGconn *pConn; // Open DB connection sprintf(sConnInfo, "hostaddr=%s port=%s connect_timeout=50 dbname=%s user=%s password=%s", sIP, sPort, sDBName, sLogin, sPassword); pConn = PQconnectdb(sConnInfo); if (PQstatus(pConn) == CONNECTION_BAD) { AddErrorToLog("No connect\n"); return 0; } GetActualPath(sActualPath, sTraversingRoot); if (*sActualPath) { stat(sActualPath, &rStatBuf); } else { stat("/", &rStatBuf); } if (nClock) nTime = time(NULL); if(S_ISREG(rStatBuf.st_mode)) { nCount = 1; ProcessFile(pConn, sActualPath); } if(S_ISDIR(rStatBuf.st_mode)) { nCount = _Traverser(pConn, sActualPath); } if (nClock) fprintf(stdout, "Total time : %u second(s)\n", time(NULL) - nTime); // Close DB connection PQfinish(pConn); return nCount; } Я хочу создать одноименный native-метод на Java public native void Traverser(String path) Соответственно в модуле traverser.c будет функция JNIEXPORT void JNICALL Java_ParallelIndexation_Traverser(JNIEnv *env, jobject obj, jstring path) Функция Java_ParallelIndexation_Traverser является оберткой функции Traverser из модуля traverser.c. Возникает вопрос: как вызвать Traverser из модуля traverser.c в Java_ParallelIndexation_Traverser, передав ей параметр jstring path, при этом преобразовав его в const char * (сигнатуру Traverser см. выше)?
Ответы
Ответ 1
Ты что-то замудрил с вопросом, если я правильно тебя понял, попробуй так: JNIEXPORT void JNICALL Java_ParallelIndexation_Traverser(JNIEnv *env, jobject obj, jstring path) { char* cstr = env->GetStringUTFChars(path, NULL); long result = Traverser(cstr) env->ReleaseStringUTFChars(path, cstr); }
Комментариев нет:
Отправить комментарий