para detectar errores de truncamiento de puntero en 64 bits, agregué el fragmento de código mencionado here que reserva los 4GB inferiores de memoria para que los allocs tengan más de 32 bits. En una aplicación de prueba MFC x64, llamo a la función de reserva lo primero en InitInstance(). Luego añade un botón que simplemente hace:Copia de seguridad de archivo en la parte inferior 4 GB completo
CFileDialog dlg(TRUE);
dlg.DoModal();
Calling DoModal finalmente se bloquea en algún lugar con una pila de llamadas en "tierra de nadie":
> 000000018000163b()
0000000100000024()
0000000000000001()
Esto no se MFC específica desde que sale el mismo comportamiento con a .NET FileDialog. Creo que es algo fuera de mi alcance ya que el archivoDialog real aparece brevemente y luego se cuelga. Se siente como una extensión de caparazón o algo así, pero no puedo entender de dónde viene, ya que la pila de llamadas no ayuda, ¡pero quiero averiguar si hay algo que pueda hacer!
Si elimino la función de reserva especial, ya no recibo los bloqueos.
¡Perplejo!
Bueno, se está trabajando, tienes que coger errores de puntero. Simplemente no en tu código. Use la utilidad AutoRuns de SysInternals para deshabilitar extensiones de shell. –
¿Qué sucede si prueba lo mismo con 'GetOpenFileName' (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646927%28v=vs.85%29.aspx)? + La web del sitio Ton est abajo ... – ixe013
¿Puedes verificar en qué espacio de direcciones del módulo se encuentra o se está destruyendo la pila? –