2013-01-17 58 views
3

我已經花了很大一部分時間來嘗試使用JNA填充並傳遞一個從Java填充C++的數組。我有基於JNA的代碼運行的重要部分,我覺得這應該很簡單,但我無法弄清楚或找到一個不使用@deprecated函數的示例。我懷疑這是微不足道的,當有人給我看時,我會覺得很蠢,但是我會很感激一些幫助。填充並傳遞一個結構數組到Java

關於我曾嘗試過的一些小背景: 我總覺得這個問題很重要,但在學習如何手動編寫接口文件(並讓它們工作)之後,我切換到了JNAerator。 JNAerator轉換

MyStruct* mine 

MyStruct mine 
在Java中

。這讓我感到困惑,因爲在Java中,這隻能用於指向單個對象。有一次,我看着用

MyStruct** mine 

它轉換爲

PointerByReference mine 

但這似乎有點小題大做,因爲我並不需要修改結構,或曾經再次訪問他們對這一問題。我已經嘗試了所有我能從這個角度考慮的事情,但是我從未成功發送過比第一個結構更多的東西。

回答

0

重新閱讀您的問題(從Java到C++通結構)後,這裏是你可以做什麼:

// Assuming a native signature like this: 
// call_native_function(MyStruct** struct_list, int count) 

MyStruct.ByReference[] list = new MyStruct.ByReference[SIZE]; 
for (int i=0;i < list.length;i++) { 
    list[i] = new MyStruct.ByReference(); 
    // Initialize the struct as needed 
} 
// Call whatever native method... 
nativeLibrary.call_native_function(list, list.length); 

也看到了JNA FAQ

+0

是的,這就是我所做的。我問了這個問題後不久就解決了這個問題。有時候我覺得這很神奇,問這個問題給了我答案。 –