2011-01-13 11 views
16

क्या इन 2 समारोह ?:"APIENTRY _tWinMain" और "WINAPI WinMain" अंतर

int APIENTRY _tWinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPTSTR lpCmdLine, 
        int  nCmdShow) 

int WINAPI WinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPTSTR lpCmdLine, 
        int  nCmdShow) 
+0

अगर आप _UNICODE, तो दूसरा उदाहरण त्रुटि है, क्योंकि LPTSTR WSTR होगा और WinMain के साथ फिट नहीं हैं, दोनों WINAPI और APIENTRY _tWinMain पर __stdcall – Kaije

+0

राइट क्लिक करें के रूप में परिभाषित कर रहे हैं परिभाषित -> परिभाषा के लिए जाने के लिए चुन ... – Jimbo

+7

आपकी WinMain() घोषणा सही नहीं है, तीसरा तर्क LPSTR है। दोनों पुरातन हैं, आपको आज wwinMain का उपयोग करना चाहिए। –

उत्तर

41

_tWinMain सिर्फ एक #defineWinMain के उचित संस्करण के लिए tchar.h में शॉर्टकट है।

तो _UNICODE परिभाषित किया गया है, तो _tWinMainwWinMain विस्तारित होती है। अन्यथा, _tWinMainWinMain जैसा ही है।

प्रासंगिक मैक्रो कुछ इस तरह दिखता (वहाँ बीच-बीच में अन्य कोड का एक बहुत कुछ है वास्तव में):

#ifdef _UNICODE 
#define _tWinMain wWinMain 
#else 
#define _tWinMain WinMain 
#endif 
+0

यह सही जवाब है! – Nawaz

1

से अंतर this link से कर रहे हैं:

_tWinMain वास्तव में hPrevInstance पैरामीटर ले करता है, लेकिन है कि पैरामीटर का उपयोग नहीं किया जाता है।

_tWinMain WinMain (TCHAR.h में) के लिए सिर्फ # परिभाषा है।

दो के बीच कोई अंतर नहीं है।

और

_tWinMain WinMain के लिए अगर यूनिकोड से परिभाषित नहीं है परिभाषित किया गया है, और को wWinMain अगर यह होता है। इसका उद्देश्य है जो आपको कोड लिखने देता है जो दोनों उत्तर और अंडिकोड के तहत बनाएगा।

+2

अन्य पोस्ट उसी पृष्ठ पर नीचे दिए गए हैं जो आप लिंक करते हैं, यह सुझाव देते हैं कि वे बिल्कुल वही नहीं हैं। दोनों के बीच का अंतर इस बात पर निर्भर करता है कि '_UNICODE' परिभाषित किया गया है या नहीं। –

+0

@ कोडी हां, अच्छी पकड़। – chrisaycock

16

अंतर मानकों, जो वैसे भी पूरी तरह से बेमानी हैं की एन्कोडिंग है। बस मापदंडों फेंक और इसके बजाय, निम्न का उपयोग जहां एन्कोडिंग को नियंत्रित:

hInstance सिर्फ GetModuleHandle(0)

hPrevInstance मान्य नहीं Win32 में वैसे भी

lpCmdLine दोनों एएनएसआई और यूनिकोड में उपलब्ध है, के माध्यम से है GetCommandLineA() और GetCommandLineW() क्रमश:

nCmdShowSTARTUPINFO संरचना के wShowWindow पैरामीटर है। फिर, एएनएसआई और यूनिकोड वेरिएंट, GetStartupInfoA(STARTUPINFOA*) और GetStartupInfoW(STARTUPINFOW*) का उपयोग करके एक्सेस किया गया।

और इन तक पहुंचने के लिए Win32 एपीआई का उपयोग करके, आप शायद कुछ वैश्विक चरों को सहेजने जा रहे हैं, जैसे कि आप सावधानीपूर्वक सहेजने वाले इंस्टेंस हैंडल को देख रहे थे, जिसे आपने सोचा था कि केवल WinMain पर उपलब्ध था।

+0

इसमें अधिक अपवर्त होना चाहिए ... – Kevin

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