2010-08-26 11 views
9

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.wWinmain, Unicode e Mingw

Grazie.

risposta

12

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

Probabilmente lavorerai su MinGW; last time I used it it did not support most of the wchar_t components of the C++ standard library (i.e. std::wifstream, std::wstring, etc) che rende difficile l'interfaccia con i bit di Windows Unicode.

Avete qualcosa contro MSVC?

+0

Non ho nulla contro MSVC, è solo un software di rilascio che non si può fare con l'edizione rapida. Anche se sono molto lontana da quel punto, voglio essere in grado di legalmente quando posso. – contrapsych

+7

@JAKE: Non vi sono restrizioni sul tipo di software che è possibile creare con MSVC Express Edition. L'unica differenza tra le edizioni complete ed espresse è che le edizioni complete hanno * significativamente * più funzioni, come ad esempio la possibilità di installare plug-in MSVC (ad es. Visual Assist X). Ma non c'è alcuna restrizione sul codice compilato - non proviene da Visual Studio in ogni caso, ma da Windows SDK. –

+0

Oh, mostra quello che so, grazie, penso che probabilmente inizierò a usare VS allora. – contrapsych

19

Per le vecchie versioni di MinGW, è possibile utilizzare un wrapper:

mingw-unicode-principale:

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

semplici wrapper per aggiungere wmain e 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 si trovano nei file. Dai un'occhiata anche a altri programmi che li usano.


Per le nuove versioni di MinGW, si dovrebbe utilizzare l'opzione -municode, come si dice nel mingw-unicode-main readme:

Nota: Questo non deve più essere utilizzato come MinGW ora ha una soluzione integrata . Aggiungi -municode alla riga di comando (ed eventualmente extern "C" alla funzione wmain).

L'opzione -municode lavora con MinGW-W64. Nel 2012-07, quando ho provato MinGW, non disponeva dell'opzione -municode.

Ecco come installare MinGW-W64:

target Win32:

target Win64:


domande Unicode-correlati:

+3

Potrebbe essere utile aggiungere che '-municode' è un'impostazione *** linker * **. –

1

So che avrei dovuto commentato invece di rispondere, ma lo faccio non ho abbastanza reputazione.

Desidero aggiungere che ho dovuto modificare i collegamenti ai file exe in [Impostazioni> Compilatore ...> Eseguibili della Toolchain> File del programma] per poter eseguire 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 della versione eseguita da Community funzionava.

Se si desidera utilizzare main invece di wmain, è necessario eliminare l'opzione -municode.