2012-12-01 13 views
16

यूएमएल संरचनात्मक आरेख में सी/सी ++ फ़ंक्शन पॉइंटर (एफपी) का सबसे अच्छा प्रतिनिधित्व क्या होगा?सी/सी ++ फ़ंक्शन पॉइंटर्स के लिए यूएमएल प्रतिनिधित्व

मैं एक इंटरफ़ेस तत्व का उपयोग करने के बारे में सोच रहा हूं, यहां तक ​​कि अगर एक ही ऑपरेशन घोषित होने की बाधा के साथ 'degenerate' हो सकता है।

मुझे इस दस्तावेज़ में कुछ प्रस्ताव मिला: C and UML Synchronization User Guide, Section 5.7.4। लेकिन यह काफी बोझिल लगता है और अभ्यास में बहुत उपयोगी नहीं है। भले ही अर्थपूर्ण दृश्य के बहुत कम स्तर से सही हो। यहाँ संक्षेप में उनकी अवधारणा दिखा एक चित्र है: C और C++ समारोह संकेत में enter image description here

IMHO एक अंतरफलक जो केवल एक ही समारोह प्रदान करता है की इस तरह के एक संकुचित दृश्य के रूप में उपयोग किया जाता है और यह हस्ताक्षर है। सी एफपी में फ़ंक्शन पॉइंटर्स के सेट वाले स्ट्रक्चर की घोषणा करने वाले अधिक जटिल इंटरफेस को लागू करने के लिए भी उपयोग किया जाएगा।

मुझे लगता है कि मैं सही कोड उत्पन्न करने के लिए अपना विशेष यूएमएल टूल (एंटरप्राइज़ आर्किटेक्ट) प्राप्त करने का प्रबंधन भी कर सकता हूं, और नुकसान के बिना कोड परिवर्तनों के साथ सिंक्रनाइज़ कर सकता हूं।

मेरे प्रश्न हैं:

  1. चाहेंगे fp की की घोषणा यूएमएल में इंटरफ़ेस तत्वों के हिस्से के रूप में एक सही अर्थ दृश्य proivde?
  2. एकल एफपी घोषणा के लिए किस प्रकार का स्टीरियोटाइप इस्तेमाल किया जाना चाहिए? कम से कम मुझे कोड कोड में टाइपिफ़ प्रदान करना होगा, इसलिए यह मेरी पसंद का विकल्प होगा। (मुझे पता चला कि यह स्टीरियोटाइप एंटरप्राइज़ आर्किटेक्ट के लिए स्वामित्व है) और मुझे कोड जनरेशन अनुकूलित करने के लिए उचित स्टीरियोटाइप परिभाषित करने की आवश्यकता है। असल में मैंने स्टीरियोटाइप नाम 'प्रतिनिधि' चुना है, क्या इसका कोई प्रभाव या अर्थपूर्ण टकराव है?
  3. सी ++ के लिए, क्लास सदस्य फ़ंक्शन पॉइंटर को सही तरीके से व्यक्त करने के लिए पर्याप्त कक्षा तत्व में 'प्रतिनिधि' स्टेरोटाइप इंटरफ़ेस को घोंसला कर रहा होगा?

    struct Interface1; 
    
    typedef int (*CallbackFunc)(struct Interface1*); 
    
    typedef struct Interface1 
    { 
        typedef void (*func1Ptr)(struct Interface1*, int, char*); 
        typedef int (*func2Ptr)(struct Interface1*, char*); 
        typedef int (*func3Ptr)(struct Interface1*, CallbackFunc); 
    
        func1Ptr func1; 
        func2Ptr func2; 
        func3Ptr func3; 
    
        void* instance; 
    }; 
    
    /* The following extern declarations are only dummies to satisfy code 
    * reverse engineering, and never should be called. 
    */ 
    extern void func1(struct Interface1* self, int p1, char* p2) = 0; 
    extern int func2(struct Interface1* self, char*) = 0; 
    extern int func3(struct Interface1* self, CallbackFunc p1) = 0; 
    

    संपादित करें:
    C language interface and function pointer implementation

    इस सी कोड है कि ऊपर मॉडल से उत्पन्न किया जाना चाहिए:

यहाँ सी भाषा प्रतिनिधित्व के लिए मेरे विचारों का एक नमूना आरेख है पूरी समस्या उबलती है कि यूएमएल उपकरण और उसके विशिष्ट कोड इंजीनियरिंग क्षमताओं के साथ सबसे अच्छा तरीका क्या होगा। इस प्रकार मैंने टैग जोड़ा है।

+0

@garzanti यदि आपका प्रश्न गंभीर है तो एक प्राचीन डेटाटाइप, मैंने इसका उल्लेख किया है (लिंक किए गए दस्तावेज़ का पालन करें)। –

+0

मैं बहुत गंभीर था, लेकिन वास्तव में उदारवादी और आप या किसी और का मजाक नहीं बना। मुझे बस विश्वास है कि कभी-कभी हमें मूल बातें वापस लौटना पड़ता है। – garzanti

+0

@garzanti कम से कम मैं यहां जर्मन पढ़ने में उलझन में था। लेकिन वैसे भी, मैं देखता हूं कि एक उम का उपयोग करके: डेटाटाइप मेरे प्रस्ताव के समान दिखाई देगा, दुर्भाग्यवश मैं अपने यूएमएल उपकरण (जो कि उचित रूप से सही है) के साथ कक्षाओं के भीतर डेटाटाइप को घोंसला नहीं दे सकता है और अतिरिक्त टाइपिफ़ी की आवश्यकता होगी, जिससे चित्र कम स्पष्ट हो जाता है इसका इरादा है –

उत्तर

7

ईए मदद फ़ाइल समारोह संकेत के विषय पर कहने के लिए निम्नलिखित है:

जब सी ++ स्रोत कोड का आयात, एन्टरप्राइज़ आर्किटेक्ट समारोह सूचक घोषणाओं पर ध्यान नहीं देता। उन्हें अपने मॉडल में आयात करने के लिए आप फ़ंक्शन पॉइंटर प्रकार को परिभाषित करने के लिए टाइपिफ़ बना सकते हैं, फिर उस प्रकार का उपयोग करके फ़ंक्शन पॉइंटर्स घोषित करें। इस तरह से घोषित फ़ंक्शन पॉइंटर्स फ़ंक्शन पॉइंटर प्रकार के गुणों के रूप में आयात किए जाते हैं।

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

मेरा सुझाव थोड़ा सा शामिल है और यह थोड़ा हैकी है, लेकिन मुझे लगता है कि इसे बहुत अच्छी तरह से काम करना चाहिए।

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

ये कक्षाएं दो उद्देश्यों की पूर्ति करेंगी: कक्षा का नाम फ़ंक्शन के प्रकार हस्ताक्षर को प्रतिबिंबित करेगा ताकि इसे चित्रों में प्रोग्रामर से परिचित लगे, जबकि टैग किए गए मानों का एक सेट वास्तविक पैरामीटर का प्रतिनिधित्व करेगा और उपयोग के लिए रिटर्न प्रकार का प्रतिनिधित्व करेगा कोड पीढ़ी में।

0) आप चरण 1-4 के लिए एक एमडीजी प्रौद्योगिकी स्थापित करना चाह सकते हैं।

1) विवरण के साथ एक टैग किए गए मान प्रकार "प्रतिशोध" को परिभाषित करें "प्रकार = रिफिल; मान = वर्ग;"

2) टैग किए गए मान प्रकारों का एक और सेट "समान 1", "par2" और इसी तरह के विवरण के साथ परिभाषित करें।

3) क्लास स्टीरियोटाइप "funptr" के साथ एक प्रोफ़ाइल को परिभाषित करें जिसमें "retval" टैग किया गया मान (लेकिन कोई "par" टैग नहीं है)।

4) कोड जनरेटिंग स्क्रिप्ट्स को संशोधित करें "घोषणा" (हमेशा) और "par1" - "parN" (जहां परिभाषित) को पुनर्प्राप्त करने के लिए विशेषता घोषणा और पैरामीटर संशोधित करें और उनके लिए सही वाक्यविन्यास उत्पन्न करें। यह मुश्किल बात होगी और मैंने वास्तव में ऐसा नहीं किया है। मुझे लगता है कि इसे बहुत अधिक प्रयास किए बिना किया जा सकता है, लेकिन आपको इसे आजमा देना होगा। आपको यह भी सुनिश्चित करना चाहिए कि "funptr" वर्ग परिभाषाओं के लिए कोई कोड जेनरेट नहीं किया गया है क्योंकि वे अनाम प्रकारों का प्रतिनिधित्व करते हैं, टाइप टाइपिफ़ नहीं।

5) अपने लक्षित प्रोजेक्ट में, आदिम सी प्रकारों का प्रतिनिधित्व करने के लिए कक्षाओं का एक सेट परिभाषित करें।

इसके साथ, आप एक फ़ंक्शन पॉइंटर प्रकार को एक «funptr» वर्ग के रूप में परिभाषित कर सकते हैं जैसे "लंबा (*) (char)" एक ऐसे फ़ंक्शन के लिए जो एक char लेता है और एक लंबा लौटाता है।

"retval" टैग में, "लंबे" वर्ग चरण में परिभाषित 4.

"par1" टैग मैन्युअल रूप से जोड़ें, और जैसा कि ऊपर "चार" वर्ग का चयन करें का चयन करें।

अब आप इस वर्ग का उपयोग किसी विशेषता या पैरामीटर के प्रकार के रूप में कर सकते हैं, या कहीं और जहां ईए कक्षा संदर्भ (जैसे कि "अलग 1« मल्टीप्टर »वर्ग के" par1 "टैग में) की अनुमति देता है; इससे आपको आसानी से आसानी मिलती है फ़ंक्शंस के लिए पॉइंटर प्रकार बनाएं जहां पैरामीटर में से एक फ़ंक्शन पॉइंटर प्रकार का होता है)।

यहां हैकएस्ट बिट क्रमांकित "par1" - "parN" टैग है। हालांकि ईए में एक ही नाम के साथ कई टैग परिभाषित करना संभव है (आपको उन्हें देखने के लिए टैग किए गए मान विंडो विकल्प को बदलना पड़ सकता है), मुझे नहीं लगता कि आप कोड जनरेशन स्क्रिप्ट में अलग-अलग मान पुनर्प्राप्त कर सकते हैं (और यहां तक ​​कि यदि आप नहीं सोच सकते कि आदेश आवश्यक रूप से संरक्षित किया जाएगा, और सी में पैरामीटर आदेश महत्वपूर्ण है)। तो आपको पहले से अधिकतम पैरामीटर तय करने की आवश्यकता होगी। अभ्यास में कोई बड़ी समस्या नहीं है; सेट अप करना 20 पैरामीटर बहुत होना चाहिए।

यह विधि रिवर्स इंजीनियरिंग के लिए कोई मदद नहीं है, क्योंकि ईए 9 आपको रिवर्स-इंजीनियरिंग प्रक्रिया को अनुकूलित करने की अनुमति नहीं देता है। हालांकि, आगामी ईए 10 (वर्तमान में आरसी 1 में) इसकी अनुमति देगा, हालांकि मैंने इसे स्वयं नहीं देखा है, इसलिए मुझे नहीं पता कि यह किस रूप में होगा।

enter image description here

+0

धन्यवाद @ यूएफएफ, जो कोड जनरेशन को सही करने के लिए बहुत व्यवहार्य लगता है और स्पष्ट रूप से दिखाता है कि यह चित्रों में किस प्रकार की चीज है। मुझे लगता है कि 'par1' से' parN' टैग प्राप्त करने के लिए संख्या में एक निश्चित सीमा होना आवश्यक है जिसे कोड जनरेशन टेम्पलेट में लागू करना होगा। –

+0

हां, प्रत्येक पैराएक्स को टेम्पलेट कोड के अपने स्निपेट की आवश्यकता होगी, और तीन-पैरामीटर मज़ेदार वर्ग में उदाहरण के लिए "par2" को हटाने से समस्याएं पैदा हो जाएंगी, यही कारण है कि मैं कहता हूं कि यह थोड़ा हैकी है। यदि आप पूरे हॉग जाना चाहते हैं, तो आप संरचनाओं को बरकरार रखने में मदद के लिए एक ऐड-इन लिख सकते हैं। – Uffe

+0

जब मैं गुणों या पैरामीटर के लिए कोड जेनरेट करने जा रहा हूं जो '<> 'का संदर्भ लेता है, तो क्या मुझे कक्षा की तुलना में कुछ और (मुझे आवश्यकता है) तक पहुंच सकते हैं? अभी के लिए मैं सिर्फ कक्षा का नाम उपयोग कर रहा हूं और '(*)' '(* ) 'के साथ प्रतिस्थापित करता हूं, कुछ हकी भी ... –

1

मेरे लिए सही लगता है। मुझे यकीन नहीं है कि आपको अपने एकल फ़ंक्शन पॉइंटर के प्रकार और संबंध को वर्णित करने के निम्न-स्तर के विवरण में गोता लगाएँ। मुझे आमतौर पर यह पता चलता है कि एक इंटरफ़ेस इसके आंतरिक तत्वों को विघटित करने की आवश्यकता के बिना पर्याप्त detalization है।

2

फ़ंक्शन पॉइंटर्स की परिभाषा यूएमएल विनिर्देश के दायरे से बाहर है। और भी, यह भाषा-विशिष्ट सुविधा है जो कई यूएमएल मॉडलिंग सॉफ्टवेयर द्वारा समर्थित नहीं है। इसलिए मुझे लगता है कि आपके पहले प्रश्न का सामान्य उत्तर इस सुविधा से बचने का सुझाव देता है। आपके द्वारा प्रदान की गई ट्रिक्स केवल एंटरप्राइज़ आर्किटेक्ट के लिए प्रासंगिक हैं और अन्य यूएमएल मॉडलिंग टूल के साथ संगत नहीं हैं।यहाँ कैसे समारोह संकेत दिए गए कुछ अन्य यूएमएल सॉफ्टवेयर में समर्थित है है:

MagicDraw यूएमएल समारोह प्रोटोटाइप के लिए एफपी वर्ग के सदस्यों के लिए < < C++FunctionPtr > > लकीर के फकीर और < < C++FunctionSignature > > उपयोग करता है। कोड की

नमूना (official site से लिया - देख viewlet "मॉडलिंग typedef और समारोह सूचक सी ++ कोड पीढ़ी के लिए"):

class Pointer 
{ 
    void (f*) (int i); 
} 

अनुरूप यूएमएल मॉडल:

Function pointers in MagicDraw UML

Objecteering संबंधित सी ++ TypeExpr नोट के साथ एफपी विशेषताओं को परिभाषित करता है।

आईबीएम से तर्कसंगत सॉफ्टवेयर आर्किटेक्ट फ़ंक्शन पॉइंटर्स का समर्थन नहीं करता है। उपयोगकर्ता उन्हें उपयोगकर्ता द्वारा परिभाषित अनुभागों में जेनरेट कोड में जोड़ सकता है जो कोड- > यूएमएल और यूएमएल -> कोड रूपांतरण के दौरान छेड़छाड़ किए गए हैं।

+0

हां, मैं इस बात से सहमत हूं कि इस भाषा विशिष्ट सुविधा का प्रतिनिधित्व इस बात पर निर्भर करता है कि आपके विशिष्ट उपकरण के लिए सबसे अच्छा क्या है। लेकिन आईएमएचओ खुदाई कर रहा है, फ़ंक्शन पॉइंटर्स, प्रतिनिधियों और समान रूप से एक उचित यूएमएल प्रतिनिधित्व है। लिंक किए गए दस्तावेज़ से डेटाटाइप दृष्टिकोण (अच्छी तरह से, उपकरण विशिष्ट), मुझे लगता है कि यह काफी अच्छी तरह से वर्णन करता है। –

0

अपने पहले उदाहरण की तरह मैं क्लासिफायर का उपयोग करता हूं लेकिन इसे प्रोफ़ाइल में छिपाता हूं। मुझे लगता है कि उन्होंने अवधारणा को समझाने की स्पष्टता के लिए इसे शामिल किया है; लेकिन व्यावहारिक रूप से 'शोर' समस्या से बचने के लिए रूढ़िवादों का पूरा विचार प्रोफाइल में विवरणों को दूर करता है। ईए प्रोफाइल को संभालने के लिए बहुत अच्छा है।

मैं अपना पहला उदाहरण से कहाँ अलग है कि मैं आदिम प्रकार स्टीरियोटाइप नहीं डेटा प्रकार स्टीरियोटाइप वर्गीकृत होता है। डेटा प्रकार एक डोमेन स्कोप ऑब्जेक्ट है, जबकि प्राइमेटिव टाइप एक परमाणु तत्व है जिसमें यूएमएल के दायरे के बाहर परिभाषित अर्थशास्त्र है। यह कहना नहीं है कि आप विशेष रूप से प्रोफ़ाइल में नोट्स नहीं जोड़ सकते हैं या इसे फ़ंक्शन पॉइंटर जैसे एक बहुत ही स्पष्ट स्टीरियोटाइप नाम दे सकते हैं।

+0

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

1

मुझे लगता है कि आप वास्तव में एक वर्ग के साथ समारोह सूचक लपेट सकता है। मुझे लगता है कि यूएमएल को कोड के लिए ब्लूप्रिंट स्तर नहीं होना चाहिए, अवधारणा को दस्तावेज करना अधिक महत्वपूर्ण है।

1

मेरी भावना यह है कि आप यूएमएल इंटरफेस को स्ट्रक्चर-फ़ंक्शन-पॉइंटर्स सी idiom पर मैप करना चाहते हैं।

इंटरफ़ेस 1 आपके मॉडल में महत्वपूर्ण तत्व है।पूरे स्थान पर फ़ंक्शन पॉइंटर ऑब्जेक्ट प्रकारों को घोषित करने से आपके चित्रों को गैरकानूनी बना दिया जाएगा।

एंटरप्राइज़ आर्किटेक्ट आपको अपने कोड जेनरेटर निर्दिष्ट करने की अनुमति देता है। Code Template Framework के लिए देखो। आप एक नए स्टीरियोटाइप या दो की सहायता से सी के लिए पूर्ववर्ती कोड जनरेटर को संशोधित करने में सक्षम होना चाहिए।

+0

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

+0

मैं देखता हूं। चूंकि यूएमएल के प्रतिनिधियों के लिए कोई आदिम नहीं है, इसलिए आपको प्रत्येक कॉलबैक प्रकार के लिए एक नई कक्षा का उत्पादन करना होगा। –

+0

@ पेड्रो_लामारो _'सेन्स यूएमएल के प्रतिनिधियों के लिए कोई आदिम नहीं है ...'_ हाँ, यह बात है। यूएमएल में सामान्य रूप से पॉइंटर प्रकारों का कोई कैप्शन नहीं होता है, हालांकि उन्हें आमतौर पर 'यूएमएल: डेटा टाइप' का उपयोग करके मॉडलिंग किया जा सकता है, जो आखिरकार 'सही तरीका' IMHO है। लेकिन मुझे इस विचार को ईए की कोड पीढ़ी और रिवर्स इंजीनियरिंग सुविधाओं के साथ सही तरीके से संभालने में कठिनाई है। यही कारण है कि कम से कम मैंने यूएफएफ के प्रस्ताव के साथ जाने का फैसला किया, क्योंकि यह ईए सी/सी ++ कक्षा मॉडल के लिए उपयोग करने का 'सबसे आसान' तरीका प्रदान करता है और पैरामीटर या विशेषताओं के रूप में उपयोग किए जाने वाले एफपी को देखने में उचित दृश्य संकेत देता है। –

0

मैं एंटरप्राइज़ आर्किटेक्ट के साथ कुछ प्रकार का काम करने में सक्षम हूं। यह एक हैकी समाधान का एक सा है, लेकिन यह मेरी जरूरतों को पूरा करता है। मैंने क्या किया:

  1. FuncPtr नामक एक नया वर्ग स्टीरियोटाइप बनाएं। मैंने यहां गाइड का पालन किया: http://www.sparxsystems.com/enterprise_architect_user_guide/10/extending_uml_models/addingelementsandmetaclass.html जब मैंने ऐसा किया तो मैंने प्रोफ़ाइल के लिए एक नया दृश्य बनाया। इसलिए मैं इसे अपने मुख्य प्रोजेक्ट के बाहर रख सकता हूं।

  2. कक्षा कोड टेम्पलेट्स संशोधित। मूल रूप से सी भाषा का चयन करें और कक्षा टेम्पलेट से शुरू करें और 'नया स्टीरियोटाइप ओवरराइड जोड़ें' दबाएं और एक नया ओवरराइड के रूप में FuncPtr में जोड़ें।

  3. कि नया टेम्प्लेट के लिए निम्न कोड में जोड़ें:

%PI="\n"% 
%ClassNotes% 
typedef %classTag:"returnType"% (*%className%)(
%list="Attribute" @separator=",\n" @indent=" "% 
); 
  1. संशोधित गुण घोषणा कोड टेम्पलेट। पहले की तरह ही रास्ता है, एक नया स्टीरियोटाइप

  2. में जोड़ने नए टेम्पलेट के लिए निम्न कोड में जोड़ें:

% पीआई = ""%% attConst == "टी"? "स्थिरांक": ""%

% attType%

% attContainment == "तक संदर्भ"? "*": ""%

% attName%

सब है कि मैं एन्टरप्राइज़ आर्किटेक्ट में जगह में समारोह संकेत पाने के लिए करना पड़ा है कि। जब मैं एक समारोह सूचक परिभाषित करना चाहते हैं मैं सिर्फ:

  1. एक नियमित रूप से वर्ग
  2. वापसी के प्रकार के साथ टैग 'returnType' में जोड़े बनाएं मैं चाहता हूँ
  3. मापदंडों के लिए विशेषताओं में जोड़ें।

इस तरह यह एक नया प्रकार तैयार करेगा जिसे अन्य वर्गों (संरचनाओं) और ऑपरेटरों में विशेषताओं या पैरामीटर के रूप में शामिल किया जा सकता है। मैंने इसे एक ऑपरेटर नहीं बनाया क्योंकि तब इसे टूल के अंदर संदर्भित नहीं किया गया था जिसे आप चुन सकते हैं।

तो यह थोड़ा सा हैकी, फ़ंक्शन पॉइंटर्स के लिए टाइप किए गए विशेष स्टीरियोटाइप क्लासेस का उपयोग करके।

+0

क्या आप कोई सुधार कर सकते हैं, यह वास्तव में प्रश्न में कोड उत्पन्न करता है, और इसे ठीक से इंजीनियर किया जाएगा? –

+0

आपको ध्यान रखना चाहिए, इस प्रश्न का पहले ही उत्तर दिया गया था (अंत में मैंने इसे आगे के उत्तरों से सही तरीके से संरक्षित किया)। यदि आप वास्तव में योगदान देना चाहते हैं, तो कृपया [अपना उत्तर संपादित करें] (http://stackoverflow.com/posts/26744049/edit) चित्र नमूने, जेनरेट कोड आदि दिखा रहा है। –

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