2011-05-14 10 views
8

मैंने अपना अधिकांश दिन यह पता लगाने की कोशिश की है कि यह त्रुटि क्यों हो रही है लेकिन यह मुझे रहस्यमय बना रही है।विजुअल स्टूडियो 2010 में एमएफसी भी शामिल है, भले ही खाली कंसोल एप्लिकेशन निर्दिष्ट है (सी ++)

मैंने विजुअल सी ++ में एक कंसोल एप्लिकेशन बनाया और इसे खाली होने के लिए निर्दिष्ट किया। आभासी फ़ोल्डर में मेरे स्रोत के सभी डाल और यह संकलन करने के बाद एक त्रुटि हो गई:

c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(24): fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(24): fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(24): fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

अजीब त्रुटि वास्तव में, क्योंकि मैं किसी भी MFC फ़ाइलें शामिल कभी नहीं। इसलिए मैंने कोड जनरेशन सेटिंग्स में "/ MT" निर्दिष्ट करके स्थिति का उपचार किया।

यह अच्छी तरह से काम ... जब तक मैं "windows.h" है, जो इस त्रुटि पैदा शामिल करने का फैसला:

c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxv_w32.h(16): fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include windows.h

c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxv_w32.h(16): fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include windows.h

मैं सब कुछ मैं के बारे में सोच सकता है, के साथ या बिना परियोजना पुनः बनाने सहित कोशिश की है precompiled हेडर, कंसोल के बजाय एक Win32 ऐप, और एक WxWidget ऐप। ये सभी ऐप्स एमएफसी को शामिल करने की कोशिश करते हैं, भले ही मैंने कभी निर्दिष्ट नहीं किया हो। क्या कोई इस समस्या पर कुछ प्रकाश डाल सकता है? धन्यवाद!

+1

ठीक है, क्या की तरह अपने कोड दिखता है? आप किस हेडर शामिल हैं? क्या आप एक न्यूनतम repro प्रदर्शित कर सकते हैं? –

+0

http://pastebin.com/VWsTC6vc यह समस्या की तरह दिखता है। मैं एक्सएमएल काम के लिए सीएमकेआरपी लाइब्रेरी का उपयोग कर रहा हूं। जाहिर है यह कस्ट्रिंग का उपयोग करता है, जिज्ञासा मुझे आश्चर्यचकित कर रही है कि यह एमएफसी के बिना काम करेगी, लेकिन मुझे नहीं पता कि इसे कैसे बनाया जाए। –

उत्तर

7

पता लगाएं कि एमएफसी हेडर सहित क्या है - /showIncludes विकल्प इससे मदद कर सकता है।

कौन सा आईडीई परियोजना में संपत्ति पेज के अधीन है:

C/C++ | Advanced | Show Includes 

एक बार जब आप जानते हैं कि उन्हें शामिल है जो आप समस्या को कैसे हल के बारे में निर्णय कर सकते हैं - तो आप बस एक गुमराह #include दूर करने के लिए सक्षम हो सकता है , लेकिन इसके लिए आप जिस लाइब्रेरी का उपयोग कर रहे हैं उसे जेएफसी पर निर्भर करने की आवश्यकता हो सकती है।

+0

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

+0

समस्या हल हो गई, सीएमर्कुप इस मामले में अनावश्यक रूप से अस्पष्ट था। धन्यवाद। –

+5

आप '#include ' का उपयोग करके एमएफसी लाइब्रेरी के बिना 'सीएसटींग'' का उपयोग कर सकते हैं। माइक्रोसॉफ्ट ने एमएफसी लाइब्रेरी से वीएस 2003 (शायद वीएस 2002) में कई यूटिलिटी क्लासेस को तोड़ दिया। यदि 'सीएसटींग'' सीएमकरअप का उपयोग करता है, तो उम्मीद है कि यह एक आसान परिवर्तन होना चाहिए ('std :: string' का उपयोग करने के लिए बदलने से लगभग निश्चित रूप से आसान)। –

5

सुनिश्चित करें कि 'एमएफसी का उपयोग' 'साझा डीएफएल में एमएफसी का उपयोग करें' सेटिंग में है। उसने मेरे लिए इसे हल कर दिया।

विन्यास गुण> सामान्य:

Use of MFC : Use MFC in a Shared DLL

विन्यास गुण> C/C++> कोड जनरेशन:

2

MFC की आवश्यकता है, निम्न मान (डीबग/Win32) सेट

Runtime Library : /MDd

यदि एमएफसी की आवश्यकता नहीं है, और केवल मानक विंडो libra ries आवश्यक हैं, सेटिंग नीचे के रूप में रखें।

विन्यास गुण> सामान्य:

Use of MFC : Use Standard Windows Libraries

विन्यास गुण> C/C++> कोड जनरेशन:

Runtime Library : /MTd

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