2012-02-23 15 views
8

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!

+5

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. –

+0

¿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

+0

¿Puedes verificar en qué espacio de direcciones del módulo se encuentra o se está destruyendo la pila? –

Respuesta

1

No puedo reproducir este bloqueo. Creé un proyecto de 64 bits, agregué la reserva de 4 GB y abrí un cuadro de diálogo de archivo dentro de él. Sin accidente.

O mi reproductor no coincide con el suyo, o hay algo en su sistema que es diferente. Debería publicar su proyecto para que podamos eliminar una de las variables.

Desafortunadamente no recuerdo qué es un TppWorkerThread.

Publique su proyecto: todos los archivos fuente, archivos de recursos, archivos .vcxproj y archivos .sln. Entonces podemos investigar.

+0

Bruce me da una idea: ¿está seguro de que no hay otra DLL cargada en su proceso? Sé de muchas extensiones que se cargan en el diálogo, podrían ser las que lo reducen. – ixe013

1

Para dar seguimiento a este tema, nos encontramos con que una extensión de shell instalado el SDK 360 hace que el tema (xeshlext.dll)

+0

Mi propio seguimiento. Encontramos un servicio interno que estaba en conflicto con la extensión de shell 360 y causó el bloqueo. La actualización a la última versión solucionó todo. ¡Lo siento por molestarte! –

Cuestiones relacionadas