Nuestro equipo de expertos pasados algunos días de investigación y de juntar de información, hemos dado con la respuesta, esperamos que te sea de utilidad para tu trabajo.
Solución:
Este código de ejemplo utiliza wWinMain
pero
Una cosa a tener en cuenta es que Visual C++ admite un punto de entrada “wWinMain” donde el parámetro “lpCmdLine” es un “LPWSTR”. Por lo general, usaría la definición de preprocesador “_tWinMain” para su punto de entrada y declararía “LPTSTR lpCmdLine” para que pueda admitir fácilmente compilaciones ANSI y Unicode. Sin embargo, la biblioteca de inicio MinGW CRT no es compatible con wWinMain, por lo que tendrá que ceñirse al estándar “WinMain” y usar “GetCommandLine()” si necesita acceder a los argumentos de la línea de comandos.
a través de la creación de aplicaciones GUI Win32 con MinGW
En este caso específico, puede utilizar WinMain
en cambio. Este programa no utiliza pCmdLine
valor, por lo que debe compilar cuando cambie wWinMain
a WinMain
y PWSTR pCmdLine
a PSTR pCmdLine
.
Si más tarde necesitaría usar la línea de comando Unicode LPWSTR cmd_line = GetCommandLineW();
en vez de WinMain
argumento.
Las versiones más recientes de Mingw también admiten -municode
la opción del enlazador cambia a un código de inicio alternativo que permite usar wWinMain
en vez de WinMain
(o wmain
en vez de main
). Agréguelo a su línea de comando, opciones del enlazador en IDE o makefile.
g++ other_options_and_arguments -municode
referencia indefinida a ‘WinMain’
trata de encontrar WinMain
y falló Entonces necesitas usar WinMain
en vez de wWinMain
.
Otro problema posible es
error: declaración en conflicto de la función C ‘int WinMain(HINSTANCE, HINSTANCE, PWSTR, int)’ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) ^~~~~~~ En archivo incluido desde c:mingw includewindows.h:44:0, from test.cpp:5: c:mingwincludewinbase.h:1263:14: nota: declaración anterior ‘int WinMain(HINSTANCE, HINSTANCE, LPSTR, int)’ int APIENTRY WinMain (HINSTANCE, HINSTANCE, LPSTR, int);
Entonces necesitas usar LPSTR
en vez de PWSTR
.
Entonces el punto de entrada tendrá este aspecto:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR pCmdLine, int nCmdShow)
Arriba está el punto de entrada de la versión ANSI.
La solución es agregar -municode
a los parámetros de compilación, como lo menciona @ssbssa en un comentario. (Mientras tanto, la respuesta aceptada se ha actualizado y lo confirma).
Ejemplo:
g++ helloworld3.cpp -o helloworld3 -Wl,-subsystem,windows -municode
Consulte https://sourceforge.net/p/mingw-w64/wiki2/Unicode%20apps/
Si bien no es necesario definir _UNICODE o UNICODE para compilar el código anterior, se necesita -municode para vincular porque usa wmain() en lugar del tradicional main().
Calificaciones y reseñas
Te invitamos a asistir nuestra investigación mostrando un comentario o puntuándolo te estamos agradecidos.