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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top