wWinmain, Unicode y Mingw

5 minutos de lectura

Estoy trabajando para aprender la API de Windows y estoy usando mingw como mi compilador con Code::Blocks como mi IDE. Me encontré con un problema al usar la función wWinMain. Usé el programa que se encuentra aquí. Texto del enlace. Se compila bien en VSC++ 2008 express, pero cuando uso mingw aparece el error “referencia indefinida a WinMain@16”. He descubierto cuál es el problema (creo). Al reemplazar wWinMain con solo Winmain y el puntero de cadena PWSTR con LPSTR, se compila perfectamente. Mi pregunta es, ¿cómo puedo solucionar esto, y si no, no es tan importante usar Unicode?

Gracias.

wWinmain, Unicode y Mingw
XP1

Para versiones anteriores de MinGW, puede usar un contenedor:

mingw-unicode-principal:

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

Envolturas simples para agregar compatibilidad con wmain y wWinMain en MinGW

Estos contenedores permiten el uso de wmain / wWinMain en MinGW sin problemas con Unicode (WCHAR), regular (CHAR) o la capacidad de elegir (TCHAR).

Las instrucciones para usarlos están en los archivos. También eche un vistazo a otros programas que los usan.


Para las nuevas versiones de MinGW, debe usar el -municode opción, como dice en el archivo Léame de mingw-unicode-main:

Nota: Esto ya no debería usarse ya que MinGW ahora tiene una solución integrada. Agregue -municode a la línea de comando (y posiblemente una “C” externa a la función wmain).

los -municode la opción funciona con MinGW-w64. En 2012-07, cuando probé MinGW, no tenía la -municode opción.

Aquí se explica cómo instalar MinGW-w64:

Objetivo Win32:

Objetivo Win64:


Preguntas relacionadas con Unicode:

  • ¿Cómo uso el punto de entrada wmain() en Code::Blocks?
  • La compilación del programa de Windows en Dev-C++ da error
  • #define _UNICODE no funciona con MinGW + CodeBlocks

  • Podría valer la pena agregar eso -municode es un enlazador ajuste.

    – Marc.2377

    31 de octubre de 2016 a las 5:29


  • @ Marc.2377 tiene razón, la opción pertenece al paso de vinculación. Muchos sistemas de compilación hacen compilaciones de C++ usando el compilador g++ como enlazador, ya que es un poco más fácil que conducir ld adecuadamente. Cuando probé esta opción yo mismo con CMake (target_link_options), el mensaje de error provino de c++.

    – hombre del espacio de cardiff

    7 marzo 2020 a las 20:35


wWinmain, Unicode y Mingw
Billy ONeal

Usar el plano (no unicode) WinMain función, y luego obtenga su línea de comando Unicode usando GetCommandLineW. MinGW no sabe de wWinMain.

Probablemente le resultará difícil trabajar en MinGW; la última vez que lo usé no era compatible con la mayoría de los wchar_t componentes de la biblioteca estándar de C++ (es decir, std::wifstream, std::wstringetc.), lo que dificultaba la interfaz con los bits Unicode de Windows.

¿Tienes algo en contra de MSVC?

  • No tengo nada en contra de MSVC, es solo que pensé que uno no puede lanzar el software que haces con la edición express. Aunque estoy muy lejos de ese punto, quiero poder hacerlo legalmente cuando pueda.

    – contrapsicología

    26 de agosto de 2010 a las 0:51

  • @JAKE: No hay restricciones sobre el tipo de software que puede compilar con MSVC Express Editions. La única diferencia entre las ediciones completa y express es que las ediciones completas tienen significativamente más funciones, como la capacidad de instalar complementos de MSVC (es decir, Visual Assist X). Pero no hay restricciones en el código compilado; en ningún caso proviene de Visual Studio, sino del SDK de Windows.

    – Billy ONeal

    26 de agosto de 2010 a las 0:53

  • Oh, muestra todo lo que sé, gracias, creo que probablemente comenzaré a usar VS entonces.

    – contrapsicología

    26 de agosto de 2010 a las 0:57

  • Ahora, con VS Community Edition (que reemplaza a Express Editions), hay incluso menos diferencias con las versiones comerciales. De hecho, Community Edition tiene características equivalentes a la versión Pro (creo que desde VS 2015). La diferencia está solo en cómo se puede usar la licencia.

    – zett42

    13/09/2018 a las 20:56


wWinmain, Unicode y Mingw
Hansebenger

Sé que debería haber comentado en lugar de responder, pero no tengo suficiente reputación.

Quiero agregar que tuve que cambiar los enlaces a los archivos exe en [Settings > Compiler… > Toolchain Executables > Program Files] para que se ejecute la versión de Community.

También mis CodeBlocks de 2016 afirmaron que era Unicode pero el -municode La opción no funcionó, solo funcionó la actualización de MiniGW a la versión de Community.

Si desea usar main en lugar de wmain nuevamente, debe eliminar la opción -municode.

  • “La versión de Comunidad” o “la versión por Comunidad”? Dices las dos cosas. Ambos son cosas completamente diferentes. Uno significa “el Comunidad versión de Visual Studio recomendada por @zett42”. El otro significa “el MinGW-W64 versión de MinGW (a diferencia de TDM-CCG) recomendado en la respuesta editada por @Community”. La suposición educada es imposible porque ambos significados tienen el mismo sentido en el contexto de este hilo.

    – 7vujy0f0hy

    21 de diciembre de 2018 a las 2:45


  • Pensé que la respuesta de “XP1” del 29_07_2012 era “Comunidad”, pero ahora aprendí que “Comunidad” es un bot y solo lo edité. Aquí repito el enlace de su publicación: sourceforge.net/projects/mingw-w64/files/… Tomé la versión 4.7.2.

    – Hansebenger

    22 de diciembre de 2018 a las 15:27


¿Ha sido útil esta solución?