Вы не говорите, настраиваете ли вы свое диалоговое окно или это просто диалоговое окно файла. Я думаю, начиная с Vista, общий диалог файлов был несколько изменен. Я знаю, если вы сравните старый код MFC с более новым, вы увидите, что код MFC был изменен, чтобы воспользоваться этими изменениями. Например, IFileDialogEvents и IFileDialogControlEvents были реализованы в MFC для поддержки способа, которым Vista и более поздние версии ОС настраивают диалоги файлов.
Я не знаю, есть ли у меня ответ, но просто для ухмылки, я, вероятно, обязательно вызову AfxOleInitialize () когда-нибудь в InitInstance (), прежде чем попытаться вызвать диалоговое окно файла.
Еще одна вещь, которую я бы попробовал наверняка (поскольку она работает под XP), была бы в конструкторе вашего CFileDialog, это убедиться, что для bVistaStyle установлено значение FALSE. Это гарантирует, что для m_bVistaStyle установлено значение FALSE, которое устанавливается при работе под XP.