2009-02-26 14 views
6

क्यों इस कार्यक्रम सही ढंग से संदेश बॉक्स प्रदर्शित करता है, लेकिन त्रुटि स्तर निर्धारित नहीं करता है?Winmain त्रुटि त्रुटि क्यों सेट नहीं करता है?

int APIENTRY _tWinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPTSTR lpCmdLine, 
        int  nCmdShow) 
{ 
    MessageBox(NULL, _T("This should return 90 no?"), _T("OK"), MB_OK); 
    return 90; 
} 

मैंने ऊपर दिए गए कोड को ए.एक्सई नामक निष्पादन योग्य नाम से संकलित किया। मैं कमांड प्रॉम्प्ट में ऐसा किया:

c:\> a.exe 
(message box is displayed, I press ok) 
c:\> echo %ERRORLEVEL% 
    0 

मैं एक ही परिणाम प्राप्त अगर मैं सही वापसी से पहले exit(90); का उपयोग करें। यह अभी भी 0 कहता है।

मैं भी CreateProcess के माध्यम से कार्यक्रम शुरू करने और GetExitCodeProcess साथ परिणाम प्राप्त करने के लिए करने की कोशिश की लेकिन यह भी मेरे लिए 0 देता है। मैंने यह सुनिश्चित करने में त्रुटि जांच की कि यह सब ठीक से शुरू हुआ था।

मैं मूल रूप से एक अधिक जटिल कार्यक्रम में इस समस्या को तो मैं समस्या को सत्यापित करने के लिए इस साधारण प्रोग्राम बनाया देखा। परिणाम समान हैं, WinMain दोनों प्रोग्राम हमेशा 0 लौटाते हैं।

मैं दोनों x64, x86 और यूनिकोड और संकलन विकल्प MBCS की कोशिश की। सभी 0 को त्रुटि स्तर/स्थिति कोड के रूप में दें।

+0

winegcc और इसके साथ परीक्षण किया मेरे सिस्टम पर 90 ($ के साथ परीक्षण?) देता है। शायद कुछ खोल मुद्दा? –

+0

मैं उपयोग कर रहा हूँ MSVC++ 2005 –

+0

मैं इसे एक खोल मुद्दा है क्योंकि मैं भी एक और app से प्रक्रिया शुरू कर दी और CreateProcess/WaitForSingleObject/GetExitCodeProcess इस्तेमाल किया –

उत्तर

14

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

यदि यह मामला है, कंसोल सबसिस्टम अनुप्रयोग के रूप में अपने आवेदन के निर्माण की समस्या का समाधान होगा। आप Windows अनुप्रयोग के रूप में चलाने की जरूरत है, तो आप को पूरा करने और देखने कि अगर काम करता है आदेश के लिए प्रतीक्षा करने के लिए कोशिश कर सकते हैं (मैं इस कोशिश की नहीं है, लेकिन यह एक अच्छा दृष्टिकोण की तरह लगता है):

start /wait a.exe 
echo %ERRORLEVEL% 
+0

धन्यवाद काम करता है नहीं लगता। CreateProcess 0 के साथ होने वाली समस्या वर्तमान कार्य निर्देशिका से संबंधित एक अलग थी। –

2

%ERRORLEVEL% के लिए काम करने के लिए आपको कमांड एक्सटेंशन सक्षम करना होगा (जो मुझे लगता है कि जब भगवान को पता है तो डिफ़ॉल्ट है)।

करने का प्रयास करें:

echo %CMDEXTVERSION% 

देखने के लिए कि एक्सटेंशन सक्षम हैं। मैं आउटपुट प्राप्त '2' जब वे पर हैं और "%CMDEXTVERSION%" वे बंद कर रहे हैं जब।

तुम भी पुरानी शैली का उपयोग कर errorlevel परीक्षण कर सकते हैं:

if errorlevel 1 echo errorlevel is 1 or more... 

कि एक्सटेंशन की परवाह किए बिना काम करना चाहिए या अगर कोई नाम के साथ एक वातावरण चर की स्थापना की है "ERRORLEVEL"

+1

ओह ... मुझे लगता है कि jdigital सिर पर असली समस्या मारा है। उपयोगी जानकारी के लिए –

+0

yup धन्यवाद –

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