
Si haz compilado un programa con wxWidgets (solo la version 2.9.x soportan 64bits) para la arquitectura de 64bit usando el compilador de Visual Studio pero compilando dicho programa desde otra IDE como por ejemplo: DialogBlocks, wxDev-C++, etc... en mi caso he usado en este ejemplo el DialogBlocks 4.40
No hay mensaje de error en la compilacion ni del vinculador (link.exe), la compilacion es perfecta pero cuando ejecutas el programa te aparece el dichoso error 0xc000007b
Buscando y buscando en internet di con la solucion, el error es culpa del archivo¿? COMCTL32.DLL o mas bien culpa del Windows que no carga la version 64bits de dicho DLL, como lo muestra esta imagen de la dependencias del programa compilado en 64bits usando el programa Dependency Walker

Como pueden ver en la imagen el archivo COMCTL32.DLL que se carga es la version x86/32bits y como puedes ver los demas archivos dependendientes son de 64bits
En Visual Studio se encarga de incrustar el archivo manifest que es, el que se encarga de "decirle" al ejecutable de 64bits que cargue el archivo COMCTL32.DLL en su version de 64bits
Pero como dije anteriormente si usas un IDE que no es Visual Studio pero usas su compilador (cl.exe, link.exe, nmake.exe), hasta los momentos no he podido incrustar el archivo manifest ya sea pasando un parametro al vinculador (link.exe) o usando el Makefile.vc (en el link muestran como hacerlo con un makefile pero no me ha dado resultado :(
Por los momentos se puede hacer usando un archivo .bat que llame al archivo mt.exe, como indican aqui
Si no está realizando una generación incremental (/INCREMENTAL:NO), puede incrustar directamente el manifiesto utilizando una línea de comandos similar a la siguiente como paso posterior a la generación:
Para un ejecutable EXE:
mt.exe -manifest MyApp.exe.manifest -outputresource:MyApp.exe;1
Para una libreria dinamica DLL:
mt.exe -manifest MyLibrary.dll.manifest -outputresource:MyLibrary.dll;2
El ejecutable mt.exe esta en el directorio Bin\x64 de el Microsoft SDKs, este es el contenido del archivo manifest.bat que tengo en el directorio ejecutable:
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64\mt.exe" -manifest wx64.exe.manifest -outputresource:wx64.exe;1
Y ya luego el porgrama se ejecuta como debe ser:

WX64.rar es el proyecto de ejemploLa version wxWidgets que use fue la 2.9.2 compilado(compile la solucion wx_vc7.sln que esta en el directorio build\msw con unicode, estatico, release, 64bits, de todas maneras en el makefile veras las opciones y recuerda editar los directorios
Publicado en tttony.blogspot.com





