2012-05-09 10 views

Respuesta

5

Usted no tiene que, es sólo un typedef de este modo:

typedef double jdouble; 

lo que es necesaria ninguna conversión, una vez que tenga un jdouble se puede tratar simplemente como un double.

Véase, por ejemplo, este code example from Standford:

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

La adición se realiza directamente con los valores de jdouble, confiando en que el compilador para encontrar la manera de generar el código necesario.

+0

Espero que sea cierto para todos los tipos? _ctype_ es igual a _jtype_ –

+0

@ program-o-steve: En general, no. Los tipos de Java tienen ancho especificado previamente, mientras que los tipos de C no. En otras palabras, "int" de Java es siempre de 32 bits, mientras que "int" de C no lo es. – NPE

0

No se necesita conversión. He usado un elenco estático simple.

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

double varDouble = static_cast<double>(jdoubleVar);