_WIN32_WINNT 0x0500 и CFileDialog
От: Alex Fedotov США  
Дата: 29.05.01 23:42
Оценка:
#Имя: FAQ.mfc.cfiledialog.winnt0500
Здравствуйте Чайков Юрий Александрович, вы писали:

ЧЮА>В stdafx.h стоит строчка:

ЧЮА>#define _WIN32_WINNT 0x0500
ЧЮА>(это нужно, чтобы делать прозрачность для окошек)

ЧЮА>В некотором месте программы создается объект класса CFileDialog:

ЧЮА>.void CErrorDlg::OnButton1()
ЧЮА>.{
ЧЮА>. CFileDialog dlg(TRUE);
ЧЮА>.}

ЧЮА>Как только этот объект разрушается — выскакивает unhandled exception. Если убрать #define — все в порядке.


ЧЮА>Чего я не учел?


Похоже, что ты все учел, а вот MFC не готова к новой версии. Просто размер структуры OPENFILENAME зависит от того, как определен макрос _WIN32_WINNT. Давно скомпилированная библиотека MFC об этот ничего не знает, вот и падает.

Eдинственное, что могу посоветовать, это найти определение CFileDialog в afxdlgs.h и исправить там

OPENFILENAME m_ofn; // open file parameter block

на

#if _WIN32_WINNT >= 0x500
OPENFILENAME_NT4 m_ofn;
#else
OPENFILENAME m_ofn;
#endif

Я на эти грабли уже садился когда Common Controls обновились. И когда они научатся об этом думать?

Ну или просто не определяеть _WIN32_WINNT 0x0500, а вписать все нужные определения себе в программу.
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.