2012-08-14 12 views
6

साथ जावा से एक ढांचे के भीतर संकेत की एक सरणी को एक्सेस करना मैं कुछ इस तरह है:बड़ा घूँट

typedef struct { 
    char * content; 
} Boo; 

typedef struct { 
    Boo **data; 
    int size; 
} Foo; 

मैं बड़ा घूँट के साथ जावा में Boo तत्वों (Boo[]) के साथ एक सरणी के लिए Boo ** data परिवर्तित करना चाहते हैं। और फिर सरणी को पढ़ने के लिए (मैं जावा कोड से एक नई सरणी संपादित, हटाना और बनाना नहीं चाहता)। एसडब्ल्यूआईजी दस्तावेज में वर्णन किया गया है कि carrays.i और array_functions के साथ ऐसा कैसे करें, लेकिन संरचना का सदस्य dataBoo* प्रकार का होना चाहिए। क्या मेरी समस्या का समाधान है?

संपादित करें: मैंने जल्दी किया है और मैं यह लिखना भूल गया हूं कि मैं सी संरचनाओं के साथ सहयोग करने के लिए एसडब्ल्यूआईजी के साथ जावा कक्षाएं उत्पन्न करना चाहता हूं।

+0

जब तक आप 'फू' की लंबाई नहीं जोड़ते, यह पूरी तरह से असंभव लगता है क्योंकि आप अकेले सूचक से लंबाई को कम नहीं कर सकते हैं। – unwind

+0

@unwind मुझे खेद है, मैं 'आकार' सदस्य को जोड़ना भूल गया हूं। मैंने अपना प्रश्न संपादित कर लिया है। –

+0

मान लीजिए कि आपके डेटा संरचना में 3 से अधिक तत्व हैं। आप तीसरे तत्व का उपयोग कैसे करेंगे? मान लें कि आपके पास 'x.size> = 3' के साथ' Foo x' ऑब्जेक्ट है। – pmg

उत्तर

3

समाधान बहुत आसान है। बस एक बड़ा घूँट इंटरफ़ेस में उपयोग:

%include <carrays.i> 
%array_functions(Boo *, boo_array); 

और फिर साथ जावा से पहुँच:

SWIGTYPE_p_p_Boo results = foo.getData(); 
for(int i = 0; i < foo.getSize(); i++) { 
    Boo booResult = foo.boo_array_getitem(results, i); 
} 

सरणी की सामग्री पुनर्प्राप्त करने।

1

आप हमेशा एक malloc कर सकते हैं, 1 दिन टैब के लिए उदाहरण होगा:

int main (void)               
{                 
    int size;               
    Foo a; 

    size = 2; 
    if (!(a.data = malloc(size * sizeof(*(a.data))))) 
    return (-1); 
    // so you will have a.data[0] or a.data[1] ... 

    // for malloc on 2d         
    // if (!(a.data[0] = malloc(size * sizeof(*(a.data)))))     
    // return (-1);              
    return 0; 
} 

लेकिन जब से तुम malloc शुरू आप के बाद आप

अन्यथा टैब के साथ किया नि: शुल्क उपयोग बू यह परिवर्तन करना होगा डेटा [] या डेटा [] [] को संकलित करने से पहले स्टॉक की एक सटीक संख्या की आवश्यकता होगी।

+0

मुझे खेद है। मैंने सही सवाल नहीं लिखा था। क्या आप इसे फिर से पढ़ सकते हैं? –

संबंधित मुद्दे