пятница, 19 декабря 2014 г.

Побеждаем exception 0x000006BA "Сервер RPC недоступен" на CFileDialog DoModal()

Проблема широко описана в англоязычном интернете, в русском описаний меньше. Проявляется в вылетании exception при отладке в месте, где ведётся работа с диалоговым окном CFileDialog. У меня вылетает на DoModal(), но описаны и случаи, когда ошибка вылетает при закрытии диалога работы с файлом.
Текст ошибки:  First-chance exception 0x000006BA, "Сервер RPC недоступен" (The RPC Server is unavailable).
При работе в релиз версии ошибка не проявляется. Т.е. проблема приводит лишь к неудобству отладки.

Обойти это можно очень простым способом: для релизной версии делать стиль окна как у Vista (bVistaStyle=true), для отладки можно пользоваться и классическим видом окна (#ifdef _DEBUG bVistaStyle=false).
До истинных причин проблемы - почему системе не нравится стиль окна Vista - я не докапывался. Если расскажете здесь в комментариях, буду только рад.
У меня VS 2010, MFC, Windows 7, 64 бита.

Код с проблемным местом: