2011-02-23 21 views
8

एमएफसी प्रोग्राम सामान्य रूप से stdout को लिख नहीं सकते हैं। एमएफसी स्टार्टअप के दौरान stdout/stdin पाइप के साथ कुछ अजीब करता है और जो भी आप लिखते हैं (उदाहरण के लिए एक printf ("हैलो");) बस/dev/null पर जाता है।मैं एक एमएफसी कार्यक्रम से stdout कैसे लिखूं?

क्या कोई जानता है कि किसी एमएफसी प्रोग्राम से सफलतापूर्वक कैसे लिखना है?

पढ़ने के लिए धन्यवाद।

उत्तर

7

लिखने के लिए कंसोल बनाने के लिए AllocConsole फ़ंक्शन का उपयोग करें। निम्न आलेख बताता है कि कंसोल पर प्रिंट करने के लिए इसका उपयोग कैसे करें।

Creating a console for your MFC app's debug output

न एक बार आप इसे पूरा कर चुके हैं FreeConsole भूल जाते हैं।

+0

यह वह जगह है मैं लगभग क्या चाहते हैं, लेकिन आप एक नया निर्माण कर रहे हैं कंसोल। मैं AttachToConsole (ATTACH_PARENT_PROCESS) का उपयोग कर रहा था और कुछ भी नहीं मिला। लेकिन समाधान _cprintf() है जिसे आपने मुझे दिया है। इसलिए आपको अंक मिलते हैं। धन्यवाद! –

+0

@ स्टीफन: शायद आप [अटैचकंसोल] (http://msdn.microsoft.com/en-us/library/ms681952 (v = vs.85) .aspx) फ़ंक्शन भी देखना चाहते हैं। यह आपके द्वारा प्रयोग किए जा रहे कार्यों से थोड़ा अलग है। – Nawaz

+0

[मैं एक अच्छा जवाब कैसे लिखूं?] (Http://stackoverflow.com/help/how-to-answer)। – IInspectable

7

यहां एक ऐसा लाइनर है जिसे मैंने कुछ समय पहले ऑनलाइन पाया जो एमएफसी में कंसोल के लिए स्टडआउट को जोड़ता है। यह प्रिंट प्रक्रिया और कोउट को वर्तमान प्रक्रिया की कंसोल विंडो में लिखने की अनुमति देता है। मैंने कभी यह नहीं देखा कि यह कैसे काम करता है, इसलिए यदि आपको एक सीर या सिने संस्करण की आवश्यकता है तो आप स्वयं ही हैं।

AllocConsole(); 
*stdout = *_tfdopen(_open_osfhandle((intptr_t) GetStdHandle(STD_OUTPUT_HANDLE), _O_APPEND), _T("a")); 
+0

धन्यवाद, यह मेरे लिए काम किया। मुझे शामिल करने की आवश्यकता थी। – opetroch

7

यदि कोई मौजूद है, तो यह कॉलिंग कंसोल विंडो से जुड़ा होगा। GotConsoleAttachFALSE होगा जब एप्लिकेशन को कंसोल से नहीं कहा गया था।

GotConsoleAttach = FALSE;  
if (AttachConsole(ATTACH_PARENT_PROCESS)) 
{ 
    int osfh = _open_osfhandle((intptr_t) GetStdHandle(STD_OUTPUT_HANDLE), 8); 
    if ((HANDLE)osfh != INVALID_HANDLE_VALUE) 
    { 
     *stdout = *_tfdopen(osfh, _T("a")); 
     GotConsoleAttach = TRUE; 
    } 
} 
+0

यह मेरे लिए बहुत अच्छा काम करता है। एक तरफ ध्यान दें, चूंकि यह एक विंडोज ऐप है, इसलिए मैंने सही तरीके से काम करने के लिए 'स्टार्ट/WAIT myapp.exe' का उपयोग किया था। – mateuscb

7

यदि आप सिर्फ डीबग विंडो में आउटपुट की तलाश में हैं, तो आप TRACE का उपयोग कर सकते हैं।

TRACE("This is a debug string of text in MFC"); 

मैं यह कर जब मैं जल्दी से कुछ का परीक्षण कर रहा हूँ और है MessageBox की तरह संवाद बॉक्स का उपयोग करने, ("पाठ") नहीं करना चाहता।

+0

यह मुझसे पूछे गए प्रश्न का उत्तर नहीं दे रहा है। –

0

एक पूरा दिन खर्च मेरी MFC कार्यक्रम बनाने के लिए printf() और अदालत एक समाधान का उपयोग कर रहा अंत में पाया प्रिंट और इसे यहाँ पोस्ट करने के लिए मदद करने के लिए जो MFC पर मुद्रित करने के लिए चाहता है तय करने की कोशिश करने के बाद ...

void EnablePrintfAtMFC() 
{ 
    if (AttachConsole(ATTACH_PARENT_PROCESS)) 
    { 
     FILE* pCout; 
     freopen_s(&pCout, "CONOUT$", "w", stdout); 
     std::cout.clear(); 
     std::wcout.clear(); 
    } 
} 

बस अपने कार्यक्रम में से कुछ जगह में ऊपर फ़ंक्शन को कॉल करें, और उसके बाद आप printf() और अदालत का उपयोग करने में सक्षम हो जाएगा ...

EnablePrintfAtMFC(); 
printf("Hello world!\n"); 
std::cout << "It works!" << endl;