Android NDK JNI Call возвращает разные значения - PullRequest
1 голос
/ 21 февраля 2012

Я создаю приложение дополненной реальности, используя Android SDK / NDK и Qualcomm AR SDK. Часть моего приложения требует, чтобы я передавал несколько массивов с плавающей точкой в ​​исходную часть программы для работы с измерениями модели.

Моя проблема в том, что, когда я передаю их в качестве параметров, они кажутся выходящими по-другому с другой стороны. Я опубликую урезанную версию моего кода:

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , "NATIVE LOG", __VA_ARGS__)

float* vertArray;

JNIEXPORT void JNICALL
Java_com_qualcomm_QCARSamples_ImageTargets_ImageTargets_loadModelDimensions(JNIEnv* env, jobject obj, jfloatArray tVertices)
{
     //used to free the memory at the end
     int verticesLength = env->GetArrayLength(tVertices);

     //the float* where the jfloatArray passes the elements
     vertArray = env->GetFloatArrayElements(tVertices, 0);

//testing purposes below

     char bufferResult[200];

     sprintf(bufferResult, "Array: %f", vertArray[0]);

     LOGE(bufferResult);
}

Метод LOGE позволяет мне отправить строку обратно в android logcat, элемент vertArray [0] равен 11.2222, но до сих пор я получал такие результаты, как:

Массив: 3.365105 Array: 3.270681 Массив: 3.280375

До сих пор я тестировал использование обычного массива C для проверки работоспособности sprintf, и я также передал jint вместо jfloatArray, и он также отображается правильно.

Есть ли причина, по которой он будет возвращать ~ 3 каждый раз, независимо от того, какой элемент массива я запрашиваю? (Я передаю в 4 массива, и все они делают то же самое)

EDIT: Java-вызов:

//native call to load dimensions
loadModelDimensions(Vertices);
...