제 프로젝트에 제 3 자 C++ API를 사용하고 있으며 반환 값이 std::vector<int>
, std::vector<bool>
, std::vector<double>
인 함수가 있습니다. Java에 이러한 유형의 변수를 전달해야합니다. 그래서 JNI를 사용하고 있습니다. 함수의 반환 값은 jintArray
, jbooleanArray
, jdoubleArray
입니다. 이 코드 블록과 아무 문제도 없어C++ 원시 타입 벡터를 Java 원시 타입 배열로 변환
std::vector<double> data;
//fill data
jdouble *outArray = &data[0];
jdoubleArray outJNIArray = (*env).NewDoubleArray(data.size()); // allocate
if (NULL == outJNIArray) return NULL;
(*env).SetDoubleArrayRegion(outJNIArray, 0 , data.size(), outArray); // copy
return outJNIArray;
:
나는 double
형식을 변환하는 다음 코드를 사용하고 있습니다. 내가 int
및 bool
유형에 대해이 작업을 수행 할 때의 문제가 다음
std::vector<int> data;
//fill data
jint *outArray = &data[0];
및
std::vector<bool> data;
//fill data
jboolean *outArray = &data[0];
문제는 jint
및 jboolean
의 정의와입니다,
typedef long jint;
typedef unsigned char jboolean;
및 jdouble
:
typedef double jdouble;
으로, 당신은 double
내 편리한 솔루션이 일치하지 않는 자신의 typedef 이후 int
및 bool
유형에 대해 작동하지 않습니다 볼 수 있습니다.
그래서, 내 질문에 내가 모든 원시 유형의 편리 이 변환을 수행 할 수있는 방법인가? 데이터 유형부터 사전
공장 초기화? – ChiefTwoPencils
오, 그게 뭐죠? – guneykayim