簡體   English   中英

如何包裝列表<int[]>使用 C++Builder 11?</int[]>

[英]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 返回一個歸因於jobjectJObject ,但在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM