En MFC, wWinMain
se define en appmodul.cpp
. Este archivo está integrado en mfc90ud.dll por lo que puedo ver. Sin embargo, cuando ejecuto mi aplicación, la pila de llamadas muestra MyApplication.exe!wWinMain
. ¿Cómo se tomó la función wWinMain
que se exportó en appmodul.obj
y la colocó en mi aplicación?¿Cómo termina el wWinMain de MFC en el ejecutable?
Respuesta
Haga clic con el botón derecho en la ventana del Explorador de soluciones, Propiedades, Enlazador, Línea de comandos. Escriba/verbose en el cuadro "Opciones adicionales". Reconstruye tu proyecto. La ventana Salida ahora muestra un rastro de donde el enlazador encontró un símbolo. Buscarla para "WinMain" para encontrar esto:
1> Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\lib\mfcs90ud.lib:
1> Found [email protected]
1> Referenced in msvcrtd.lib(wcrtexew.obj)
1> Loaded mfcs90ud.lib(appmodul.obj)
Nota el nombre de biblioteca, mfcs90ud.lib es una librería de enlace estática. Si se busca "mfcs90ud.lib", entonces también puede ver cómo quedó referenciado esa biblioteca:
1>Starting pass 1
1>Processed /DEFAULTLIB:mfc90ud.lib
1>Processed /DEFAULTLIB:mfcs90ud.lib
1>Processed /DEFAULTLIB:msvcrtd.lib
etc..
si se busca el código fuente MFC para "MFC", encontrará cómo consiguió inyecta esta opción/defaultlib . Desde afx.h:
#ifdef _DEBUG
#pragma comment(lib, "mfc" _MFC_FILENAME_VER "ud.lib")
#pragma comment(lib, "mfcs" _MFC_FILENAME_VER "ud.lib")
#else
#pragma comment(lib, "mfc" _MFC_FILENAME_VER "u.lib")
#pragma comment(lib, "mfcs" _MFC_FILENAME_VER "u.lib")
#endif
En pocas palabras, una aplicación MFC vincula dos bibliotecas. Mfc90u.lib es la biblioteca de importación para la versión DLL de MFC. Mfcs90u.lib es una biblioteca de enlaces estáticos que contiene los bits que se vinculan a su ejecutable. Incluyendo WinMain().
El enlazador hace todo eso. Toma todos los archivos de objeto, archivos de biblioteca y coincide con lo que necesita. Junto con las decoraciones, puede hacer coincidir las declaraciones correctas con las definiciones, etc.
La mágica es hecho por el constructor de CWinApp:
- se declara una variable global de este tipo (en su mayoría de tipo derivado).
- CWinApp :: CWinApp se llama (antes de cualquier rutina principal).
- Configura alguna estructura de datos, que luego es devuelta por
AfxGetApp()
. ¡Es algo bastante complicado! wWinMain
se llama, que utiliza la estructura de datos configurada por el constructor de CWinApp.
Pruebe la depuración desde wWinMain
, o desde su constructor personalizado CWinApp
-derivado.
Hola, gracias por tu respuesta, pero eso en realidad no respondió mi pregunta. –
¿Te refieres a la inclusión de appmodul.obj? – Ajay
Sí, prácticamente, no me di cuenta de que MFC consistía en una biblioteca estática y una biblioteca dinámica. –
- 1. wWinmain, Unicode y Mingw
- 2. Cómo detectar "Usar MFC" en el preprocesador
- 3. Cómo iniciar un ejecutable externo de C# y obtener el código de salida cuando el proceso termina
- 4. Diferencia entre WinMain y wWinMain
- 5. ¿Cómo saber cuándo termina el TTS?
- 6. El uso de Plurals termina en ResourcesNotFoundException
- 7. ¿Cómo usar MFC en el servicio de Windows?
- 8. Cómo eliminar el botón Ayuda predeterminado en CPropertySheet en MFC?
- 9. ¿Cómo comprobar si el directorio ya existe en MFC (VC++)?
- 10. ¿Cómo detectar el archivo termina en nueva línea?
- 11. gdb - ¿Cómo ejecutar automáticamente el ejecutable?
- 12. Cómo utilizar el temporizador en la aplicación basada en el cuadro de diálogo MFC?
- 13. prueba Powershell si ejecutable en el camino
- 14. Configurando el ejecutable activo en Xcode
- 15. ¿Intenta capturar el ejecutable exe en Powershell?
- 16. El uso de multiprocesamiento en Python termina en ImportError
- 17. Cómo configurar el icono de la derecha administrativa en el botón de diálogo MFC?
- 18. Visual Studio 2010 generó más grande el tamaño del ejecutable
- 19. Eliminación de menú en MFC
- 20. Reabra el cuadro de diálogo modal en MFC
- 21. ¿Puedo serializar el mapa de STL en MFC usando CArchive?
- 22. PyInstaller crea el ejecutable lento
- 23. ¿Cuál es el CTabCtrl preferido frente a CPropertySheet en MFC?
- 24. Tamaño de una biblioteca y el ejecutable
- 25. ¿Cómo ejecutar el trabajo cron cuando termina otro trabajo cron?
- 26. ¿Cómo averiguo el ejecutable PHP actualmente en ejecución?
- 27. ¿cómo puedo obtener el directorio actual del ejecutable en py2exe?
- 28. ¿Cómo se almacena el código en un ejecutable?
- 29. ¿Cómo matar un hilo MFC?
- 30. ¿Cómo establecer el nombre de proceso ejecutable de un proyecto?
Excelente, gracias por una respuesta completa :) –
El motivo de la pregunta es que quería anular algunos de los inicios iniciales en MFC. Mi primer pensamiento fue ir a WinMain, pero ahora sé que puedo usar AfxWinMain en su lugar. –