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:
Home> Toolchains rivolti a Win32> Personal Build> rubenvb> gcc-4.7-release:
Su Windows, si desidera “i686-w64-mingw32-gcc-4.7.2-release- win32 _rubenvb.7z”.
Estrai la cartella nella root della tua unità.
Rinominare la cartella “mingw32” in “MinGW-32”.
Target Win64:
Home> Toolchains destinati a Win64> Personal Build> rubenvb> gcc-4.7-release:
Su Windows, si desidera “x86_64-w64-mingw32-gcc-4.7.2-release- win32 _rubenvb.7z”.
Estrai la cartella nella root della tua unità.
Rinominare la cartella “mingw64” in “MinGW-64”.
Domande relative a Unicode:
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.