2010-08-10 7 views
7

मुझे अपने आवेदन में पाइथन एम्बेड करने के साथ प्रयोग करने में दिलचस्पी है, उपयोगकर्ता को आंतरिक वातावरण (सी ++ - कार्यान्वित) ऑब्जेक्ट्स आदि तक पहुंचने के लिए, पाइथन स्क्रिप्ट को एप्लिकेशन वातावरण में चलाने के लिए, मैं इस पर काफी नया हूं इसलिए पता नहीं ठीक है मैं क्या कर रहा हूँ।मुझे सी ++ बिल्डर/डेल्फी 2010 एप्लिकेशन में पायथन को कैसे एम्बेड करना चाहिए?

मैंने Embedding Python in Another Application पढ़ा है, हालांकि यह केवल सी एपीआई और फ्लैट सी कार्यों के बारे में बात करता है, कक्षाओं या वस्तुओं (जब तक मुझे कुछ याद नहीं आया) और इसके "सी ++ में एम्बेडिंग पायथन" अनुभाग केवल दो वाक्य लंबा है । हालांकि, मैं भी how to use boost::python पर आया और यह उत्कृष्ट दिखता है।

एक समस्या है: boost :: python is not supported by C++ Builder 2010

तो, यह देखते हुए क्या, एक सी ++ आवेदन सी ​​++ बिल्डर 2010, और साथ संकलित में अजगर को एम्बेड का उपयोग कर जो भी तकनीक है सबसे अच्छा, आप कैसे प्रदर्शित करूं/एकीकृत वर्गों और वस्तुओं अजगर सांकेतिक शब्दों में बदलनेवाला देने के लिए के लिए सबसे अच्छा तरीका है एक कार्यक्रम के ऑब्जेक्ट उन्मुख आंतरिक तक पहुंच? क्या मुझे मानक दृष्टिकोण याद आया है? आंतरिक कक्षाओं या तत्काल वस्तुओं को पाइथन में ऑब्जेक्ट्स के रूप में उजागर कर रहा है, या एपीआई वास्तव में सी-स्टाइल या फ्लैट/गैर-ओओ है, और यदि ऐसा है तो ऐसी एपीआई के माध्यम से अंतर्निहित ओओ परत की नकल करने का सबसे अच्छा तरीका क्या है?

नोट: मैं वास्तव में आरएडी स्टूडियो का उपयोग करता हूं, जिसमें सी ++ बिल्डर और डेल्फी दोनों शामिल हैं। कुछ प्रकार के डेल्फी-विशिष्ट बाध्यकारी का उपयोग करना संभव हो सकता है, लेकिन जिन लोगों का सामना मैंने किया है वे six or seven years old हैं, या नए-आश (पायथन 2.6) हैं लेकिन don't seem to have any documentation हैं और "Anyone reads thiese [sic] comments anyway? Anyone working on this project?" जैसी समस्या सूची में टिप्पणियां हैं जो उत्साहजनक नहीं हैं । लेकिन कृपया डेल्फी-विशिष्ट उत्तरों को शामिल करने में संकोच न करें, खासकर यदि आपको लगता है कि यह संभव है कि वे संयुक्त डी + सीबी ऐप में काम करेंगे। मैं सभी उत्तरों की सराहना करता हूं भले ही वे बिल्कुल सही नहीं हैं - मैं शोध कर सकता हूं, मुझे सिर्फ पॉइंटर्स की आवश्यकता है कि कहां जाना है। एक देशी सी ++ समाधान शायद आदर्श होगा, हालांकि, वीसीएल-व्युत्पन्न वस्तुओं का उपयोग करने से इसकी अपनी सीमाएं होती हैं।

आपके इनपुट के लिए धन्यवाद!

उत्तर

8

आपको Google समूह में पी 4 डी प्रोजेक्ट से डरना नहीं चाहिए। यह निष्क्रिय लगता है क्योंकि, कुछ हिस्सों में, यह पहले से ही बहुत स्थिर और पूर्ण-विशेषीकृत है। उन घटकों का उपयोग अधिक सक्रिय PyScripter एप्लिकेशन में किया जाता है जो वर्तमान में उपलब्ध सर्वोत्तम पायथन विकास संपादकों में से एक है। PyScripter डेल्फी में लिखा है और पी 4 डी घटकों का उपयोग करता है। इस प्रकार, यह पी 4 डी घटकों का उपयोग करने का एक बहुत व्यापक उदाहरण भी प्रस्तुत करता है, हालांकि पी 4 डी स्रोत चेकआउट के साथ प्रदान किए गए उदाहरण पहले से ही शुरू करने के लिए पर्याप्त हैं।

+1

ठीक है, धन्यवाद। मुझे इसकी वेबसाइट से एहसास नहीं हुआ कि यह उतना स्थिर है। –

1

रूप वस्तुओं आसान पायथन के लिए आंतरिक वर्ग या instantiated वस्तुओं को उजागर है, या एपीआई सही मायने में सी-शैली या फ्लैट/गैर OO है, और इसलिए यदि क्या सबसे अच्छा तरीका है एक अंतर्निहित नकल करने के लिए ओओ परत एपीआई के माध्यम से?

आपने पहले से ही उत्तर दिया है। वाक्य का उत्तरार्द्ध हिस्सा सही है।

जैसे ही आप संकलित करते हैं, केवल कुछ संरचनाएं (vtables), और कुछ अन्य ओओ डेटा समझाते हुए ऑब्जेक्ट्स और कक्षाएं मौजूद नहीं होती हैं, बशर्ते आरटीटीआई सक्रिय हो। यही कारण है कि कक्षाओं और वस्तुओं का उपयोग कर पायथन और सी ++ के बीच के अंतर को पुल करना संभव नहीं है।

आप निश्चित रूप से अपने आप को बना सकते हैं, कुछ डेटा संरचनाओं के साथ सी कार्यों का एक सेट बना सकते हैं, और फिर एक ओओ-लेयर। लेकिन आप बॉक्स से बाहर नहीं कर सकते हैं।

उदाहरण के लिए, वर्ग कार:

class Car { 
public: 
    int getDoors() 
     { return this->doors; } 
protected: 
    int doors; 
}; 

में अनुवाद किया है:

struct Car { 
    int doors; 
}; 

int Car_getDoors(Car * this) 
{ 
    return this->doors; 
} 

और getDoors के लिए एक कॉल:

Car_getDoors(c) 
:

c->getDoors() 

रूप में अनुवाद किया है

+0

धन्यवाद ... मुझे पता है कि मोटे तौर पर ओओ को कैसे लागू किया जाता है :) तो आप मूल रूप से इस ओ/एस को हर जगह पास करके ओओ-जैसे इंटरफ़ेस को फिर से बनाने के लिए कह रहे हैं? बहुत अजीब लगता है :( –

+0

हां यह बेकार है, हालांकि यह लागू किया गया है। और हां, यदि आप अपना ओओ इंटरफ़ेस बनाने की योजना बना रहे हैं तो आपको उन सभी के साथ सौदा करना चाहिए। किसी अन्य मौजूदा इंटरफ़ेस का उपयोग करने के अलावा कोई और विकल्प नहीं है। – Baltasarq

+0

ठीक है, मैं एक और इंटरफ़ेस का उपयोग कर रहा हूं जो मैं पूछ रहा हूं। यदि संभव हो तो मैं पाइथन/सीपीपी हुक को फिर से बनाना नहीं चाहता हूं - यदि कोई मौजूदा ढांचा है तो मैं अपने कंपाइलर के साथ उपयोग कर सकता हूं, यही वह है जो मैं कर रहा हूं। मुझे सबकुछ फिर से बनाना होगा, मैं बस एक और भाषा का उपयोग करूंगा जिसके लिए बेहतर समर्थन है! –

0

आप swig के साथ सी ++ से $ SCRIPTLANG रैपर उत्पन्न कर सकते हैं।

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

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