2012-05-09 18 views

risposta

5

Non devi, è solo un typedef in questo modo:

typedef double jdouble; 

Quindi non è necessaria alcuna conversione, una volta che hai un jdouble si può trattare come un double.

Vedi per esempio questo code example from Standford:

JNIEXPORT jdouble JNICALL Java_Summer_sum__DD 
(JNIEnv *env, jobject jobj, jdouble j1, jdouble j2) { 
    return j1 + j2; 
} 

L'aggiunta viene effettuata direttamente con i valori jdouble, confidando il compilatore di capire come generare il codice richiesto.

+0

Spero che sia vero per tutti i tipi? _ctype_ è uguale a _jtype_ –

+0

@ program-o-steve: In generale, no. I tipi Java hanno larghezza pre-specificata, mentre i tipi C no. In altre parole, "int" di Java è sempre 32 bit, mentre "int" di C non lo è. – NPE

0

Non è necessaria alcuna conversione. Ho usato un semplice cast statico.

jfieldID varPtr = env->GetFieldID(dataClass, "var", "D"); 
jdouble jdoubleVar = env->GetDoubleField(dataClass, varPtr); 

double varDouble = static_cast<double>(jdoubleVar);