[英]How to wrap List<int[]> with C++Builder 11?
我正在努力使用 C++Builder 11 訪問camera_parameters->getSupportedPreviewFpsRange()
返回的數據。
getSupportedPreviewFpsRange()
function 在這里描述: https://developer.android.com/reference/android/hardware/Camera.Parameters#getSupportedPreviewFpsRange()
我對包裝不是由其他函數返回的數組的數據沒有任何問題,但我找不到包裝List<int[]>
數據類型的方法。
Delphi 處理這個的方法似乎是:
camera_parameters: JCamera_Parameters;
pointer: Pointer;
jobject: JObject;
list_fps_ranges: JList;
currentFpsRange, suitableFPSRange: TJavaArray<Integer>;
...
list_fps_ranges := camera_parameters.getSupportedPreviewFpsRange();
jobject := list_fps_ranges.get(I);
pointer := (jobject as ILocalObject).GetObjectID;
fpsRange := TJavaArray<Integer> (WrapJNIArray(pointer, TypeInfo(TJavaArray<Integer>)));
不幸的是,我找不到正確翻譯的方法:
fpsRange := TJavaArray<Integer> (WrapJNIArray(pointer, TypeInfo(TJavaArray<Integer>)));
進入 C++。
我試過:
TJavaObjectArray__1<_di_JInteger>
沒有任何運氣,因為沒有WrapJNIArray()
function。
怎么做到的?
不幸的是,我找不到正確翻譯的方法:
fpsRange:= TJavaArray<Integer> (WrapJNIArray(pointer, TypeInfo(TJavaArray<Integer>)));
進入 C++。
嘗試這樣的事情:
_di_JCamera_Parameters camera_parameters;
TJavaArray__1<int> *currentFpsRange;
TJavaArray__1<int> *suitableFPSRange;
...
_di_JList list_fps_ranges = camera_parameters->getSupportedPreviewFpsRange();
_di_JObject jobject = list_fps_ranges->get(I);
void *objID = ((_di_ILocalObject)jobject)->GetObjectID();
// alternatively:
//
// #include <Androidapi.Helpers.hpp>
// void *objID = TAndroidHelper::JObjectToID(jobject);
TJavaArray__1<int> *fpsRange = (TJavaArray__1<int>*) WrapJNIArray(objID, __typeinfo(TJavaArray__1<int>));
我試過:
TJavaObjectArray__1<_di_JInteger>
沒有任何運氣,因為沒有
WrapJNIArray()
function。
首先, TJavaArray<Integer>
轉換為TJavaArray__1<int>
,而不是TJavaObjectArray__1<_di_JInteger>
。
其次, WrapJNIArray()
是一個 helper function 在<Androidapi.JNIBridge.hpp>
中聲明。
您發布的List<int[]
list_fps_ranges示例工作正常,但我仍然對如何在簡單List<Integer>
的情況下正確使用WrapJNIArray
感到困惑
我試圖用getZoomRatios()
function 復制你的解決方案,它也是Camera.Parameters
的一部分
getZoomRatios()
function 返回一個List<Integer>
int n_zoomratios;
void *pointer;
_di_JList list_zoomratios;
list_zoomratios= jcamera_parameters->getZoomRatios(); // return List<Integer>
_di_JObject jobject= list_zoomratios; //fishy...
pointer= TAndroidHelper::JObjectToID(jobject);
TJavaArray__1<int> *zoomratios = (TJavaArray__1<int>*) WrapJNIArray(pointer, __typeinfo(TJavaArray__1<int>));
不幸的是,我無法確定jobject
應該使用list_zoomratio
的哪些參數。
在 fps 范圍示例中, list_preview_fps->get()
function 返回一個歸因於jobject
的JObject
,但在list_zoomratios
的情況下,沒有我可以使用的明顯JObject
參數。 我嘗試了很多不同的方法,但都沒有成功。
包裝 integer 數組的正確方法是什么? 順便問一下,有沒有描述這些包裝機制的書/文件? 我在網上找不到關於這個主題的任何信息。
謝謝您的幫助
問題是這樣解決的:
int n_zoomratios;
int i;
void *pointer;
_di_JList list_zoomratios;
_di_JInteger zoomratio;
list_zoomratios= jcamera_parameters->getZoomRatios(); // List<Integer>
n_zoomratios=list_zoomratios->size();
for(i=0;i<n_zoomratios;i++)
{
_di_JObject jobject=list_zoomratios->get(i);
pointer= TAndroidHelper::JObjectToID(jobject);
zoomratio = TJInteger::Wrap(pointer);
sprintf(txt,"%d %d",i,zoomratio->intValue());
log(txt);
}
但是我不明白為什么我不能用 WrapJNIArray 轉換一個完整的數組,而我必須一個一個地轉換每個元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.