Différence entre WinMain et wWinMain
La seule différence est que Winmain prend char* pour lpCmdLine paramètre, tandis que wWinMain prend wchar_t*.
Sur Windows XP, si une entrée de l'application est WinMain, Windows convertir la ligne de commande à partir d'Unicode en Ansi et passer à l'application?
Si le paramètre de ligne de commande doit être en Unicode (par exemple, nom de fichier Unicode, la conversion sera la cause de certains caractères manquant), cela signifie que je dois utiliser wWinMain que la fonction d'entrée?
source d'informationauteur cuteCAT
Vous devez vous connecter pour publier un commentaire.
Oui.
Oui, vous devez, si vous souhaitez gérer correctement Unicode arguments à votre programme.
La documentation à WinMain() sur MSDN convient également.
Cependant, vous pouvez également utiliser GetCommandLineW pour récupérer la ligne de commande spécialement en Unicode.
WinMain
/wWinMain
n'est pas le vrai Windows point d'entrée. Windows appelle simplement la fonction spécifiée dans le PE - tête avec zéro des paramètres.Lors de l'utilisation de l'outil de Microsoft chaîne c'est
void WinMainCRTStartup() { ... }
lorsque vous créez une application graphique et il est fourni pour vous à moins que vous lier avec /Zl.La valeur par défaut
WinMainCRTStartup
code créé par Visual C++ initialise la bibliothèque run-time C, des appels mondiaux des constructeurs (le cas échéant), puis appelle votreWinMain
/wWinMain
fonction avec unHINSTANCE
deGetModuleHandle(NULL)
la ligne de commande à partir deGetCommandLineA/W()
(en sautant sur le nom de fichier dans la ligne de commande) et la commande show deGetStartupInfo
.La seule différence entre
WinMain
etwWinMain
est la chaîne de ligne de commande et que vous devez utiliserwWinMain
dans les applications Unicode (et toutes les applications créées ces jours-ci devraient utiliser l'Unicode). Bien sûr, vous pouvez manuellement appelGetCommandLineW()
dansWinMain
et d'analyser vous-même si vous le voulez vraiment.Dans Windows NT/2000/XP et plus tard la ligne de commande est une chaîne Unicode en interne et
WinMain
/GetCommandLineA()
vous donne une version convertie de ce qui pourrait ne pas être en mesure de représenter tous les caractères correctement. Sur Windows 95/98/ME c'est l'inverse maisGetCommandLineW()
est toujours capable de convertir tous les caractères deGetCommandLineA()
.Windows XP vers le haut est en unicode par défaut! Et donc, aucune conversion n'est nécessaire. Le C++ Runtime chargeur prend soin de l'argument de passer à l'application. La norme API Win32 dicte que l'entrée principale est WinMain(...).