Differenza tra WinMain e wWinMain

L’unica differenza è che Winmain prende char* per lpCmdLine parametro, mentre wWinMain prende wchar_t*.

Su Windows XP, se un’applicazione voce è WinMain, Windows convertire la riga di comando da Unicode e Ansi passare all’applicazione?

Se il parametro della riga di comando deve essere in formato Unicode (ad esempio, nome di file Unicode, la conversione sarà causa di alcuni caratteri mancanti), vuol dire che devo usare wWinMain come la funzione di entrata?

InformationsquelleAutor cuteCAT | 2009-11-24

 

3 Replies
  1. 13

    Su Windows XP, se un’applicazione voce è WinMain, Windows convertire la riga di comando da Unicode e Ansi passare all’applicazione?

    Sì.

    Se il parametro della riga di comando deve essere in formato Unicode (ad esempio, nome di file Unicode, la conversione sarà causa di alcuni caratteri mancanti), vuol dire che devo usare wWinMain come la funzione di entrata?

    Sì, si dovrebbe, se si desidera gestire correttamente Unicode argomenti del programma.

    La documentazione per WinMain() su MSDN anche d’accordo.

    È possibile, tuttavia, utilizzare anche GetCommandLineW per recuperare la riga di comando appositamente in Unicode.

  2. 1

    WinMain/wWinMain non è il vero Windows punto di ingresso. Windows chiama la funzione specificata PE intestazione con i parametri zero.

    Quando si utilizza il tool di Microsoft catena questo è void WinMainCRTStartup() { ... } quando si crea un’applicazione GUI ed è fornito per voi a meno che non si collega con /Zl.

    Predefinito WinMainCRTStartup codice creato da Visual C++ inizializza la libreria di runtime C, chiamate mondiale costruttori (se c’è) e poi chiama il tuo WinMain/wWinMain funzione con un HINSTANCE da GetModuleHandle(NULL), la riga di comando da GetCommandLineA/W() (saltando sopra il nome del file nella riga di comando) e il comando mostra dal GetStartupInfo.

    L’unica differenza tra WinMain e wWinMain è la stringa della riga di comando e si dovrebbe utilizzare wWinMain in Unicode applicazioni (e di tutte le applicazioni create in questi giorni dovrebbe utilizzare Unicode). Ovviamente si può chiamare manualmente GetCommandLineW() in WinMain e analizzare da soli, se si vuole veramente.

    In Windows NT/2000/XP e poi la riga di comando è una stringa Unicode internamente e WinMain/GetCommandLineA() fornisce una versione convertita di questo che potrebbe non essere in grado di rappresentare ogni singolo personaggio correttamente. In Windows 95/98/ME è il contrario, ma GetCommandLineW() è sempre in grado di convertire ogni personaggio GetCommandLineA().

    • si può aggiungere una fonte per le tue informazioni in modo che possiamo più?
    • fonte per l’istruzione?
    • Volevo solo saperne di più su come funziona un WinMain lavoro
  3. 0

    Windows XP verso l’alto, è unicode per impostazione predefinita! E, quindi, non è necessaria alcuna conversione. Il C++ Runtime loader si prende cura dell’argomento, passando per l’applicazione. API Win32 Standard impone che la voce principale è WinMain(…).

    • “Nota che lpCmdLine utilizza il LPSTR tipo di dati invece di LPTSTR tipo di dati. Questo significa che WinMain non può essere utilizzato da programmi Unicode.” (msdn.microsoft.com/en-us/library/ms633559.aspx)
    • Grazie Johannes per il testa a testa e per ricordare a me.
    • Windows NT4 Unicode per impostazione predefinita 🙂
    • Paolo, per chiarire – non è XP unicode per impostazione predefinita anche!?!

Lascia un commento