2011-01-24 13 views
5

मेरे पास सी ++ एमएफसी में एक सॉफ्टवेयर है जिसमें सी निर्यात का उपयोग करके प्लगइन के लिए कुछ सार्वजनिक इंटरफेस है।प्लगइन समर्थन को लागू करने का सबसे अच्छा तरीका

मैं बाहरी 3 पार्टी विकास के लिए सॉफ्टवेयर खोलने वाला हूं। लेकिन एक सी निर्यात का उपयोग कट्टर प्रोग्रामर के लिए हैं।

इसे लागू करने का सबसे अच्छा तरीका क्या है? मैंने लुआ के बारे में सुना, लेकिन अन्य संभावनाओं के बारे में जानना चाहता हूं।

उत्तर

0

यदि आपके पास सी निर्यात प्रोग्रामिंग उदाहरण हैं जो आपके लिए काम करते हैं तो मेरा सुझाव है कि आप अपने पूर्व-अनुमानित "कट्टर" विचारों को एक तरफ रखें और नाइके कहते हैं, "बस इसे करें।"

यह आपके अपेक्षा से आसान हो सकता है।

+0

लेकिन मुझे डेवलपर्स को परियोजना में "आकर्षित" करना चाहिए। और निश्चित रूप से सी निर्यात के लिए आज के डेवलपर्स के लिए नहीं हैं। – bratao

+0

भले ही यह काटा और पेस्ट हो? –

3

मुझे लगता है कि यह वास्तव में प्रोग्राम के प्रकार और आपके लक्षित दर्शकों पर निर्भर करता है। वाह यकीन है कि कई एडॉन्स नहीं होंगे क्योंकि इसे सी और एक कंपाइलर लिखने की आवश्यकता होती है। लेकिन मुझे यकीन है कि लुआ में एक बड़ा एडन लिखना नहीं चाहेंगे।

तो, किसी और चीज से पहले आपको यह तय करने की आवश्यकता है कि आप एक स्क्रिप्टिंग भाषा या संकलित भाषा का उपयोग करना चाहते हैं या नहीं। यदि आप आकस्मिक उपयोगकर्ताओं को लक्षित करते हैं तो एक स्क्रिप्टिंग भाषा बेहतर विकल्प हो सकती है। यदि आप पेशेवर डेवलपर्स को लक्षित करते हैं (कहें, एक वित्तीय पैकेज जिसका एडॉन्स इन-हाउस प्रोग्रामर द्वारा विकसित किया गया है) तो संकलित भाषा सर्वोत्तम काम कर सकती है।

ओह, और भी - आप संभावित प्लगइन डेवलपर्स का समूह क्यों नहीं पूछते?

+0

उत्तर के लिए धन्यवाद, लेकिन सॉफ्टवेयर को एक मुफ्त सॉफ्टवेयर के रूप में मुख्यधारा में जारी किया जाएगा। तो मेरे पास अभी तक संभावित प्लगइन डेवलपर्स नहीं हैं, लेकिन मैं उन्हें आकर्षित करने के लिए चीजों को जितना संभव हो सके रखना चाहता हूं। – bratao

+0

@bratao यदि आपके पास कोई डेवलपर _yet_ नहीं है, और सी इंटरफ़ेस पहले से ही किया गया है, तो मैं पहले रिलीज कहूंगा, और फिर देखें कि किसी अन्य प्लगइन वातावरण के लिए कितनी मांग है। –

0

हम एक ग नामकरण सम्मेलन और कार्यों का dlopen\LoadLibrary परिवार का उपयोग एक प्लगइन लोड करने के लिए (.dll या .so), 3 की जरूरत विधियों (create_plugin(), destroy_plugin(), और get_type() पाते हैं।

एक प्लगइन implementer केवल सुनिश्चित करें कि बराबर (जो भी भाषा में वे का उपयोग करें) पुस्तकालय

extern "C" PLUGIN_API plugin_interface* create_plugin(arg_pack*); 
extern "C" PLUGIN_API void destroy_plugin(plugin_interface*); 
extern "C" PLUGIN_API const char* get_type(); 

है कि आप क्या करने के लिए अपने प्लगइन की आवश्यकता पर निर्भर करता है में दृश्यमान है बनाने के लिए है, arg_pack विशिष्ट तर्क के साथ बदला जा सकता है।

इस प्रकार की चीज़ करने के लिए क्रॉस-प्लेटफ़ॉर्म लाइब्रेरी देखने के लिए [gmodule][1] के लिए प्रलेखन देखें।

0

लोगों को आकर्षित करना चाहते हैं? जावास्क्रिप्ट गर्म है। V8 इंजन एम्बेड करें।

http://code.google.com/apis/v8/embed.html

0

निर्यात सी कार्यों का उपयोग कर बना सकते हैं और इंटरफेस वापस जाने के लिए एक द्विआधारी इंटरफेस को लागू करें।

// your_plugin_header 

// Plugins must implement this interface 
struct PluginInterface { 
    virtual void Release()=0; 
    virtual void Method()=0; 
    virtual void Method2()=0; 
}; 


// Plugin dll's must export this function that creates a new object that implements 
// the PluginInterface; 
extern "C" bool CreatePluginObject(PluginInterface**); 

फिर, एक उदाहरण प्लगइन एक लुआ/Javascript/अजगर सेतु के रूप में लागू करने, और बंडल है कि अपने सॉफ्टवेयर के साथ। बॉक्स के बाहर आप कसकर युग्मित सी ++ इंटरफ़ेस दोनों का समर्थन करते हैं, प्लस एक अत्यधिक पटकथा प्लगइन इंटरफ़ेस, और, यदि कोई भी एक अलग स्क्रिप्ट पसंद करता है, तो वे इसे स्वयं कर सकते हैं।

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