wmain vs runtime principale C
Domanda
Ho letto alcuni articoli su diversi pooints voce Windows C, wmain e WinMain.
Quindi, se non sbaglio, questi vengono aggiunti a compilatori di linguaggio C per il sistema operativo Windows. Ma, come vengono attuati?
Per esempio, wmain ottiene Unicode come argv [], ma il suo sistema operativo che invia questi argomenti per il programma, quindi c'è qualche campo speciale nella voce del file .exe che dice a Windows per passare arguemnts come unicode? Grazie.
Soluzione
Le versioni moderne di Windows utilizzare internamente UTF-16. Pertanto, quando si avvia un file eseguibile, tutti gli argomenti della riga di comando probabilmente sono passati come UTF-16 fin dall'inizio, e la libreria di runtime legato nell'applicazione lanciato uno passa gli argomenti attraverso indenne (se si utilizza wmain
) o li converte la codifica locale automaticamente (se si utilizza main
). (In particolare questo sarebbe fatto da wmainCRTStartup
/ mainCRTStartup
che sono i punti di ingresso effettivi utilizzati per le applicazioni di console di Windows.)
Altri suggerimenti
Per prima cosa: uno sproloquio pedante: wmain certamente non ottiene gli argomenti Unicode. Unicode è definita indipendentemente di qualsiasi particolare codifica. wmain ottiene argomenti a carattere codifica 16 bit di Unicode, UTF-16 ad un'ipotesi. Ho appena controllato la documentazione di Microsoft sul wmain ed i collegamenti da essa ed è chiaro che Microsoft non aveva idea di quello che Unicode è quando l'ha scritto.
In ogni caso, il punto di ingresso di un programma viene definito dal linker. Un programma C ha sempre una certa quantità di codice che viene eseguito prima prologo principale / wmain / WinMain / wWinMain. Se si utilizza una delle ampie versioni del principale, il codice di prologo converte i caratteri per l'ambiente da qualsiasi set di caratteri sono in alla versione di caratteri estesi.