2009-07-01 17 views
19

मैं सी ++ पुस्तकालयों से सी रैपर उत्पन्न करना चाहता हूं। कैसे हाथ से यह करने के लिए पर ट्यूटोरियल के होते हैं:सी ++ से सी रैपर जेनरेट करें?

लेकिन यह एक शारीरिक श्रम का बहुत अधिक है।

उदाहरण के लिए, इस बात के लिए:

struct RtAudio { 
    virtual DeviceInfo const& f() {...} 
    class DeviceInfo { 
     virtual void g() { ... } 
    }; 
    ... 
}; 

मैं लिखने की जरूरत है:

struct RtAudioC { 
    RtAudio x; 
}; 
struct DeviceInfo { 
    RtAudio::DeviceInfo x; 
}; 
extern "C" { 
    RtAudioC* newRtAudio() { 
     return new RtAudioC; 
    } 
    void deleteRtAudio(RtAudioC *p { 
     delete p; 
    } 
    /* do something with RtAudio::f() */ 
    void g(DeviceInfo *p) { 
     try { 
      p->x.g(); 
     } catch (SomeError & err) { 
     } 
    } 
} 

वहाँ उपकरण है कि इस प्रक्रिया को स्वचालित कर सकते हैं?

उत्तर

1

वहां gmmproc है जो gobject आधारित सी पुस्तकालयों के लिए सी ++ रैपर बनाता है, लेकिन यह एकमात्र कोड जेनरेटर है जिसे मैंने सी और सी ++ के बीच सुना है।

यदि आप एक पार्सर लिखने के लिए अच्छे हैं, तो मूल रैपर जेनरेटर बनाने का काम बहुत मुश्किल नहीं होगा। अंत में आपको मैन्युअल रूप से कुछ परिष्कृत स्पर्श जोड़ना पड़ सकता है, लेकिन फिर भी आपका काम भार कम हो जाएगा।

1

आप SWIG का प्रयास कर सकते हैं, सी कोड जेनरेटर पिछले साल की जीएसओसी परियोजना थी। AFAIK उन्होंने इसे अभी तक ट्रंक में विलय नहीं किया है, इसलिए आपको & चेकआउट करना होगा एसवीएन से शाखा बनाएं।

0

मुझे ऐसा करने के लिए ऑफ-द-शेल्फ टूल के बारे में पता नहीं है। यदि आप पीढ़ी को स्वचालित करना चाहते हैं और अपनी स्क्रिप्ट लिखने में प्रसन्न हैं, pygccxml (GCC-XML पर आधारित) सी ++ हेडर को पार्स करने का एक अच्छा तरीका है।

1

आपका सी ++ कोड पहले से ही कितना लिखा गया है बनाम है। अभी तक कितना लिखा जाना है? यदि उचित अनुपात को लिखा जाना है, तो मैं एक सरलीकृत वाक्यविन्यास तैयार करूंगा, जो सी ++ और सी हेडर दोनों उत्पन्न करता है, जैसे आईडीएल COM इंटरफेस के लिए करता है। यह सरलीकृत वाक्यविन्यास आपके लिए सी ++ की तुलना में पार्स करना अधिक आसान होगा, या आप संभवतः शेल्फ से कुछ ढूंढ सकते हैं जो ऐसा करता है।

2

मैंने अभी यह करने के लिए पाइथन में एक सी फ़ंक्शन रैपर विकसित किया है (सी ++ कक्षाएं उत्पन्न करें जो सी कार्यों को लपेटती हैं)।

यह अभी भी जवान है लेकिन मुझे जो कुछ करने की आवश्यकता है वह अब वहां है। इसे आज़माएं और मुझे बताएं कि आप क्या सोचते हैं: https://github.com/mlb5000/CFunctionWrapperGenerator

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