저는 jni 프로그래밍을 처음 접했습니다. Java에서 jni로 float 배열을 전달하고, jni 측에서 배열을 float하기 위해 동적으로 충분한 메모리를 할당하고, jfloatArray에 일부 값을 저장하고, java에 액세스하려고합니다. 내가 jfloatArray를 반환하고 싶지 않아 그냥 전달 된 입력 플로트 배열을 수정하십시오. 나는 아래의 방법을 시도했지만 그것은 내 자바 부동 배열을 수정하지 않습니다. 이것을 달성하는 방법? JNI 프로그래밍
Java Code:
float[] pointList = null;
outputBitmap = callJNIFunc(pointList, inputBitmap);
JNI Code:
Bitmap callJNIFunc(JNIEnv *env, jfloatArray pointListInPixels, jobject inputBitmap) {
pointListInPixels = (env)->NewFloatArray(pointListSize.M * 2);
env->SetFloatArrayRegion(pointListInPixels, 0, pointListSize.M * 2, pointFloats);
}
나는이 사용자 정의 개체를 전달하여 달성 할 수
pass data between Java and C에서 읽습니다. 그러나, 나는 당신의 JNI 함수의 첫 번째 줄에서이
public class CustomObject{
public float[] points;
public float[] getPoints() {
return points;
}
public void setPoints(float[] points) {
this.points = points;
}
}
하지만 내 jni func에는 이미 다른 반환 유형이 있습니다. 나는 이것을 돌려 보낼 수 없다. 그것이 주요 문제입니다. 내가 참조로 받아 들여서 @konsolas를 수정하고 싶습니다. –
@rsd_unleashed Java는 JNI를 포함하여 값별로 전달됩니다. 당신은 이것을 할 수 없습니다. – EJP
JNI에서 두 개의 필드가있는 객체를 반환 할 수 있습니다. 또는 두 객체에 두 개의 JNI 함수를 사용하십시오. – konsolas