2010-11-04 14 views
11

इसलिए नए हजार वर्षों मैं के साथ मेरी C++ कोड दुबारा लिखा में हो रही है: या तो यूनिकोड या MBCS विकल्पों फिर जब अनुप्रयोग एक कमांडलाइन आर्ग के साथ चलाया जाता है, या तो सीधे या द्वारा के साथ बनाया गया है, तोविंडोज यूनिकोड कमांडलाइन argv

int main(int argc, wchar_t **argv) 

चीनी फोंट के कुछ मिश्रण में argl [] अपठनीय = नामित फ़ाइल नामों पर डीबीएल-क्लिक करें।

टिप्पणियों के लिए धन्यवाद - मैं खोज इंजन के लिए यहां कोशिश करता हूं और संक्षेप में (z) उन्हें देखता हूं। (: कंसोल सबसिस्टम) एप्लिकेशन

  • int winMain(int argc, wchar_t **argv) काम करता है एक जीयूआई के लिए

    1. wmain(int argc,char **argv) केवल एक कमांडलाइन के लिए इस्तेमाल किया जा सकता है (सबसिस्टम: विंडोज़), लेकिन जीयूआई उसके अपने प्रवेश बिंदु के साथ यह बदल देता है। क्यूटी के मामले में यह काम नहीं करता

      qtmaind.lib (qtmain_win.obj): त्रुटि LNK2019: अनसुलझे बाह्य प्रतीक समारोह _WinMain में संदर्भित _main @ 16

    समाधान उपयोग main(int arc,char **argv) हो रहा है या main(int argc,wchar_t**argv) लेकिन argv को अनदेखा करें। फिर argv या NULL के साथ QAplication को कॉल करें - argv को अनदेखा किया जाता है क्योंकि क्यूटी आंतरिक रूप से GetCommandLine() को कॉल करता है।
    फिर पार्स किए गए तर्कों को वापस करने के लिए app.arguments का उपयोग करें।
    फिर आवश्यक होने पर इन्हें क्यूटी के स्ट्रिंग फ़ंक्शंस के साथ Wchar में परिवर्तित किया जा सकता है।

    QApplication app(argc, (char**)argv); or QApplication app(argc,NULL); 
    QStringList args = app.arguments(); 
    

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

    #include <tchar.h> 
    
    int _tmain(int argc, TCHAR **argv) 
    { 
        return 0; 
    } 
    

    _tmainwmain के रूप में परिभाषित किया गया है:

  • +0

    +1 इस गूगलर से! – knight666

    उत्तर

    15

    आप अपने प्रवेश बिंदु wmain नाम के लिए की जरूरत है: http://msdn.microsoft.com/en-us/library/fzc2cy7w(VS.80).aspx

    +0

    ऐसा लगता है कि WMain केवल कमांडलाइन ऐप में उपयोग किया जा सकता है, wWinMain जीयूआई के लिए है लेकिन क्यूटी लाइब्रेरी के साथ संघर्ष करता है। –

    +0

    @ मार्टिन, मैंने सोचा कि 'मुख्य' केवल कमांड लाइन प्रोग्राम के लिए भी इस्तेमाल किया जा सकता है, इसलिए मैंने इसे एक मुद्दा नहीं माना। –

    +0

    दुर्भाग्यवश आपको कमांडलाइन तर्क के रूप में भेजा गया फ़ाइल नाम मिलता है जब आप dbl-click करते हैं, मुझे लगता है कि यह वास्तव में एक क्यूटी बग है। –

    2

    इस प्रयास करें।

    +3

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

    +1

    @ एएलएफ, जानना उत्सुक है कि' टी' सामान कैसे हो सकता है आपको परेशानी में ले आओ ऐसा लगता है कि सी ++ कठोर प्रकार की प्रणाली आपको किसी भी आपदाजनक आपदा की चेतावनी देगी। –

    +2

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

    4

    आप उस उद्देश्य के लिए GetCommandLine फ़ंक्शन का उपयोग कर सकते हैं।

    +2

    और 'commandLineToArgvW() 'को भी एक अरवी-शैली' wchar_t []' सरणी में स्ट्रिंग लौटाए गए पार्स को पार्स करने के लिए देखें। –