2009-10-25 18 views
13

मेरे पास वीएस -2008 में एक Win32 DLL प्रोजेक्ट है, यह सी के मॉड्यूल के मुट्ठी भर में लिखा गया है।
क्योंकि मैं भी वीएस -2008 के बाहर किसी भी निर्भरता के साथ बाहरी VS2008 बनाने में सक्षम होना चाहता हूं, मैंने कस्टम मेकफ़ाइल बनाया है, जो सभी बिल्ड और लिंक चरणों को करता है। यह सब ठीक है स्थापित है।क्या मैं विजुअल स्टूडियो में एक प्रोजेक्ट में सी ++ और सी मिश्रण कर सकता हूं?

अब मैं इस डीएलएल में कुछ सी ++ मॉड्यूल जोड़ना चाहता हूं। मैंने सी ++ के रूप में .cpp मॉड्यूल को संकलित करने के लिए कस्टम मेकफ़ाइल संशोधित किया है, और नियमित सी (/ टीसी) के रूप में .c मॉड्यूल को संकलित किया है। यह सब काम करता है। यह सब कुछ एक साथ जोड़ता है, कोई समस्या नहीं है।

क्या मैं इसे करने के लिए वीएस -2008 प्रोजेक्ट को कॉन्फ़िगर कर सकता हूं?

क्या मैं उसी वीएस -2008 प्रोजेक्ट में सी ++ और सी मिश्रण कर सकता हूं?

या क्या मुझे इसके लिए कस्टम निर्माण चरण की आवश्यकता है?

धन्यवाद।


उत्तर

मैं VS2008 परियोजना सी के रूप में मैं "डिफ़ॉल्ट" के रूप में संकलित करने के लिए इसे बदलने के लिए की जरूरत को संकलित करने के लिए सेट किया था। सही परियोजना का चयन करें गुण, और फिर क्लिक करें ...:

alt text http://i33.tinypic.com/qqsd8g.jpg

धन्यवाद, पावेल।

+0

मैं बस समाधान एक्सप्लोरर "गुण" से फ़ाइल .c का चयन करता हूं -> फिर सी कोड के रूप में संकलित करें। और इसका काम: पी – user956584

उत्तर

8

सबसे पहले, आपको /Tc की आवश्यकता भी नहीं होनी चाहिए यदि आप इसे स्वयं बना रहे हैं - cl.exe प्रकार निर्धारित करने के लिए फ़ाइल एक्सटेंशन का उपयोग करता है, इसलिए .c फ़ाइलों को डिफ़ॉल्ट रूप से सी के रूप में संकलित किया जाएगा, और .cpp और C++ के रूप में .cxx फ़ाइलें।

वीएस परियोजनाओं के लिए, यह ठीक उसी तरह काम करता है, सिवाय इसके कि आप इस व्यवहार को ओवरराइड नहीं कर सकते (या कम से कम मुझे नहीं पता)।

+1

बहुत उपयोगी। बाहर निकलें वीएस में एक विकल्प "संकलन के रूप में" विकल्प, एक/टीसी,/टीपी, या "डिफ़ॉल्ट" सेट करने के लिए एक विकल्प है। मैंने इसे/टीसी पर सेट किया था। मुझे इसे "डिफ़ॉल्ट" पर रीसेट करने की आवश्यकता थी। ठीक। – Cheeso

1

उन्हें ठीक जोड़ना चाहिए, क्योंकि माइक्रोसॉफ्ट सी कंपाइलर दोनों संकलित करेगा। यदि आप उन्हें प्रोजेक्ट में जोड़ते हैं, तो वे cl पर पास हो जाएंगे - और मेरा मानना ​​है कि cl फ़ाइल के विस्तार के आधार पर किस मोड का उपयोग करना पसंद करता है। आप .cpp का उपयोग कर रहे हैं, जो अच्छा है।

संक्षेप में: हां।

जीसीसी यह भी करेगा, इसलिए आपकी मेकफ़ाइल उचित पोर्टेबल होनी चाहिए।

+1

ध्यान दें कि यदि आप 'gcc' के साथ C++ संकलित कर रहे हैं, तो 'gcc' लिंक चरण में आवश्यक पुस्तकालयों को जोड़ नहीं सकता है। सी ++ प्रोग्राम के लिए लिंक चरण हमेशा 'g ++' का उपयोग करना चाहिए, न कि 'gcc' – bdonlan

5

एक ही परियोजना में सी और सी ++ मिश्रण करने में बिल्कुल कोई समस्या नहीं है। सी फंक्शंस और सी डेटा स्ट्रक्चर के tems में सी और सी ++ मॉड्यूल के बीच अपने इंटरफ़ेस को डिज़ाइन करने के लिए आपको इसे करने की आवश्यकता होगी, फिर सुनिश्चित करें कि उन इंटरफ़ेस फ़ंक्शन सी ++ पक्ष पर सी-लिंकेज विनिर्देशक extern "C" के साथ घोषित किए गए हैं।

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