Сбой FileDialog при заполнении нижних 4 ГБ - PullRequest
8 голосов
/ 23 февраля 2012

Для того, чтобы отловить ошибки усечения указателя в 64 битах, я добавил фрагмент кода, упомянутый здесь , который резервирует нижние 4 ГБ памяти, поэтому объем выделяемых ресурсов превышает 32 бита.В тестовом приложении MFC x64 я сначала вызываю функцию резервирования в InitInstance ().Затем я добавил кнопку, которая просто выполняет следующие действия:

CFileDialog dlg(TRUE);
dlg.DoModal();

Вызов DoModal в конечном итоге приводит к аварийному завершению где-то с помощью стека вызовов в "земле без людей":

>   000000018000163b()  
    0000000100000024()  
    0000000000000001()  

Это не относится к MFC, посколькутакое же поведение с .NET FileDialog.Я думаю, что это что-то из моих рук, так как фактический fileDialog обнаруживается кратко, а затем вылетает.Похоже на расширение оболочки или что-то в этом роде, но я не могу понять, откуда оно исходит, поскольку стек вызовов не помогает - но я хочу выяснить, могу ли я что-нибудь сделать!

Если я уберу специальноефункция резервирования Я больше не получаю сбои.

Озадачен!

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Чтобы решить эту проблему, мы обнаружили, что расширение оболочки, установленное на 360 SDK, вызывает проблему (xeshlext.dll)

1 голос
/ 29 февраля 2012

Я не могу воспроизвести этот сбой.Я создал 64-битный проект, добавил резервирование 4 ГБ и открыл в нем диалог с файлами.Никаких сбоев.

Либо мое воспроизведение не совпадает с вашим, либо в вашей системе есть что-то другое.Вы должны опубликовать ваш проект, чтобы мы могли удалить одну из переменных.

К сожалению, я не помню, что такое TppWorkerThread.

Опубликовать ваш проект - все исходные файлы, файлы ресурсов,Файлы .vcxproj и .sln.Тогда мы можем расследовать.

...