En este caso específico, esto significa una de dos cosas: Estás intentando escribir una aplicación Win32 GUI (o una aplicación no-consola) y accidentalmente la estás compilando como Console aplication... ó realmente estás escribiendo y compilando una aplicación de consola pero no escribiste o no compilaste apropiadamente una función main().
Generalmente el primero es el error más común, si especificas como tipo de proyecto en VC++, Win32 Console, cuando crees tu proyecto obtendrás este error. También puedes obtener este error si intentas compilar desde la linea de comandos usando BC++ y olvidas especificar los parámetros correctos para decirle al compilador que haga una aplicación Win32 GUI en lugar de una aplicación de consola, la cual es la especificada por default.
Si estás el compilador de línea de comando, BC++, debes usar -tW para especificar que se trata de una aplicación Windows.
VC++ (y la mayoría de los compiladores) automáticamente compilan un archivo con la extensión .cpp cuando se trata de código C++ y con la extensión .c cuando se trata de código C. Si has agregado el código del tutorial a un archivo .cpp, está es la razón exacta para obtener este error.
Si estás compilando código que no sea de este tutorial, no puedo garantizarte que sea correcto y por lo tanto puede ser un error que proviene de otro lado. Debes determinar si es seguro convertir el valor para remover el error o si realmente estás intentando que una variable sea algo que no es.
Por ejemplo, esto funcionaría en C:
HBITMAP hbmOldBuffer = SelectObject(hdcBuffer, hbmBuffer);
Pero en C++ necesita un cast
HBITMAP hbmOldBuffer = (HBITMAP)SelectObject(hdcBuffer, hbmBuffer);
afxres.h
a los archivos de recursos aún cuando no estamos usando un proyecto MFC y este archivo sólo puede ser instalado si se instala MFC. Este particular archivo realmente no es necesario, por lo tanto para corregir el error podemos editar el archivo .rc en el block de notas y reemplazar ambas apariciones de afxres.h
con winres.h
(observa que debe haber dos apariciones y debes cambiar ambas).
Si agregas un Common Control a un diálogo y éste falla al intentar mostrarlo, seguramente ha falle la llamada antes que ejecutes el diálogo . El mejor lugar para realizar esta llamada es en WinMain()
. Si realizamos la llamada en WM_INITDIALOG
, es demasiado tarde debido a que el diálogo fallará antes de que llegue a este punto y por lo tanto nunca será llamado.
Algunas personas y algunas documentaciones pueden decirte que InitCommonControls()
está obsoleto y que debes usar InitCommonControlsEX()
, pero eres libre de elegir, InitCommonControls()
es mas simple y no hay nada malo en usarla.
Versión en Español: FedericoPizarro - 2003