Question

J'ai lu quelques articles sur différents pooints d'entrée C Windows, wmain et WinMain.

Alors, si je ne me trompe pas, ceux-ci sont ajoutés aux compilateurs de langages C pour Windows OS. Mais, comment sont mises en œuvre?

Par exemple, wmain obtient Unicode comme argv [], mais son Os qui envoie ces arguments au programme, donc est-il un champ spécial dans l'entrée de fichier .exe qui dit aux fenêtres pour passer arguemnts comme unicode? Merci.

Était-ce utile?

La solution

Les versions modernes de Windows utilisent en interne UTF-16. Par conséquent, lorsque vous lancez un fichier exécutable, tous les arguments de ligne de commande probable sont passés en UTF-16 dès le début, et la bibliothèque d'exécution liée à l'application lancée soit Transmet les arguments en sortir indemne (si vous utilisez wmain) ou les convertit au codage local automatiquement (en cas d'utilisation main). (Plus précisément, cela serait fait par wmainCRTStartup / mainCRTStartup qui sont les points d'entrée réels utilisés pour les applications console Windows.)

Autres conseils

Tout d'abord: une diatribe pédant: wmain certainement ne reçoit pas des arguments Unicode. Unicode est définie indépendamment de tout codage particulier. wmain obtient des arguments dans un encodage de caractères Unicode 16 bits, UTF-16 à une estimation. Je viens de vérifier la documentation de Microsoft sur wmain et les liens de lui et il est clair que Microsoft avait pas la moindre idée de ce que Unicode est quand ils l'ont écrit.

Quoi qu'il en soit, le point d'entrée d'un programme est défini par l'éditeur de liens. Un programme C a toujours une certaine quantité de code de prologue qui fonctionne avant principal / wmain / WinMain / wWinMain. Si l'une des grandes versions de principale est utilisée, le code de prologue convertit les caractères dans l'environnement de tout jeu de caractères qu'ils sont à la version large de caractères.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top