wWinmain, Unicode e Mingw

Sto lavorando per imparare l’API di Windows e sto usando mingw come mio compilatore con Code :: Blocks come IDE. Ho riscontrato un problema con l’utilizzo della funzione wWinMain. Ho usato il programma che si trova qui link text . Si compila bene su VSC ++ 2008 Express ma quando si usa mingw si ottiene l’errore “riferimento non definito a WinMain @ 16”. Ho capito qual è il problema (credo). Sostituendo wWinMain con Winmain e il puntatore String PWSTR con LPSTR, esso viene compilato perfettamente. La mia domanda è, come posso risolvere questo problema, e in caso contrario, non sto usando Unicode come un grosso problema.

Grazie.

Utilizzare la funzione WinMain semplice (non unicode) e quindi ottenere la riga di comando Unicode utilizzando GetCommandLineW . MinGW non sa di wWinMain .

Probabilmente troverai difficile lavorare su MinGW; l’ultima volta che l’ho usato non supportava la maggior parte dei componenti wchar_t della libreria standard C ++ (cioè std::wifstream , std::wstring , ecc.) che rendevano difficile l’interfacciamento con i bit di Unicode Windows.

Hai qualcosa contro MSVC?

Per le vecchie versioni di MinGW, puoi usare un wrapper:

mingw-unicode-main:

https://github.com/coderforlife/mingw-unicode-main/

Wrapper semplici per aggiungere wmain e il supporto wWinMain in MinGW

Questi wrapper consentono l’utilizzo di wmain / wWinMain in MinGW senza problemi con Unicode (WCHAR), regolare (CHAR) o la possibilità di scegliere (TCHAR).

Le istruzioni per il loro utilizzo sono nei file. Dai anche un’occhiata agli altri programmi che li usano.


Per le nuove versioni di MinGW, dovresti usare l’opzione -municode , come si dice nel readme mingw-unicode-main:

Nota: questo non dovrebbe più essere usato poiché MinGW ora ha una soluzione integrata. Aggiungi -municode alla riga di comando (ed eventualmente extern “C” alla funzione wmain).

L’opzione -municode funziona con MinGW-w64. Nel 2012-07, quando ho provato MinGW, non aveva l’opzione -municode .

Ecco come installare MinGW-w64:

Target Win32:

Target Win64:


Domande relative a Unicode:

  • Come utilizzare il punto di ingresso wmain () in Code :: Blocks?
  • La compilazione del programma Windows in Dev-C ++ dà errore
  • #define _UNICODE non funziona con MinGW + CodeBlocks

So che avrei dovuto commentare invece di rispondere, ma non ho abbastanza reputazione.

Voglio aggiungere che ho dovuto cambiare i collegamenti ai file exe in [Impostazioni> Compilatore …> Eseguibili della Toolchain> Programmi] per far funzionare la versione di Community.

Anche i miei CodeBlocks del 2016 hanno affermato che era Unicode ma l’opzione -municode non funzionava, solo l’aggiornamento MiniGW alla versione eseguita da Community funzionava.

Se si desidera utilizzare nuovamente main anziché wmain, è necessario eliminare l’opzione -municode.