Tôi đang sử dụng API C++ của bên thứ ba cho dự án của mình và có chức năng với giá trị trả về với các loại std::vector<int>
, std::vector<bool>
, std::vector<double>
. Tôi cần phải chuyển các biến với các kiểu này sang Java. Vì vậy, tôi đang sử dụng JNI và chức năng của tôi đã trả về các giá trị với các loại jintArray
, jbooleanArray
, jdoubleArray
.chuyển đổi loại vector nguyên gốc C++ thành mảng loại nguyên thủy java
Tôi đang sử dụng đoạn mã sau để chuyển đổi double
loại:
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;
Tôi đã không có vấn đề với khối mã này. Nhưng khi tôi muốn làm điều này cho int
và bool
loại có một vấn đề ví dụ sau:
std::vector<int> data;
//fill data
jint *outArray = &data[0];
và
std::vector<bool> data;
//fill data
jboolean *outArray = &data[0];
Vấn đề là với các định nghĩa của jint
và jboolean
, vì:
typedef long jint;
typedef unsigned char jboolean;
và cho jdouble
:
typedef double jdouble;
Như, bạn có thể thấy giải pháp thuận tiện của tôi cho double
không hoạt động cho các loại int
và bool
vì typedef của chúng không khớp.
Vì vậy, câu hỏi của tôi là làm thế nào tôi có thể làm chuyển đổi này cho tất cả các loại nguyên thủy thuận tiện?
Cảm ơn trước
Tạo một nhà máy? – ChiefTwoPencils
Ồ, đó là gì? – guneykayim