#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); }
Комментариев нет:
Отправить комментарий