Здраствуйте.
В очередной раз я напоролся на неразрешимую проблему. Может кто-то подскажет мне, что сделать и этим спасет меня — буду очень благодарен.
Вобщем, вот в чем дело. Дали мне проект пределывать. Был написан изначально на Visual Studio 2002. Открываю я этот проект и пытаюсь собрать на Visual Studio 2005:
Ну вот, собираю я этот проект и вижу ошибку :
error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CFlatHeaderCtrl::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'
Cast from base to derived requires dynamic_cast or static_cast
в строке объявления события ON_WM_NCHITTEST в карте сообщений класса CFlatHeaderCtrl:
Довольно странно, учитывая, что функция OnNcHitTest, унаследованная от CHeaderCtrl возвращает LRESULT.
Поначалу, я попытался решить эту проблему в лоб — просто заменил в объявлении и реализации OnNchitTest возвращаемое значение c UINT на LRESULT. В отместку мне высыпался список из 500-та ошибок.
Но ничего лучшего я не придумал.
В этом коде были замечены и другие странные вещи: переменную, объявленную внутри for(...) продолжали использовать и вне тела цикла!
Re: Проблема с месседж-маппом.
От:
Аноним
Дата:
10.08.06 00:35
Оценка:
Здравствуйте, Jackson86, Вы писали:
J>Довольно странно, учитывая, что функция OnNcHitTest, унаследованная от CHeaderCtrl возвращает LRESULT.
Закомментируйте старый обработчик и добавьте новый 2005-ым визардом. Смотрите разницу.
J> В этом коде были замечены и другие странные вещи: переменную, объявленную внутри for(...) продолжали использовать и вне тела цикла!
Старые майкрософтские компиляторы так себя вели. Теперь — соответствуют стндарту, но есть опция компилятора возвращающая старое поведение. Должна присутствовать в установках проекта.
И вот у меня осталась уже одна ошибка — но понять не могу, что она означает!
msvcrtd.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
Здравствуйте, Jackson86, Вы писали:
J>Привет всем!
J>И вот у меня осталась уже одна ошибка — но понять не могу, что она означает! J>msvcrtd.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
Надо указать в установках линковщика, что надо собирать не консольное приложение, а для Windows (SUBSYSTEM: WINDOWS)
Здраствуйте, это снова я со своими ошибками.
Да, никогда не думал, что копаться в чужом коде может быть так мучительно.
С вашей помощью мне таки удалось собрать этот проект, но вот новый косяк, который мне не по зубам.
Итак, приложение создано на основе архитектуры "document/view". При открытии главного окна, открывается документ, лежащий в папке с экзешником, или создается новый, если оного не имеется.
Тут -то я и встречаюсь с ошибкой. Мне выводится следующее сообщение в Message — Box:
Failed to create empty document.
Начинаю отслеживать ошибку. Мой путь начинается в перегруженной функции CWinApp:
void CMyWinApp::OnFileNew()
{
if (m_pDocManager != NULL)
m_pDocManager->OnFileNew();
}
Затем в OnFileNew() вызывается pTemplate->OpenDocumentFile(NULL)
Здесь документ создается, но фрейм нет — pFrame = CreateNewFrame(pDocument, NULL) — возвращает NULL.
При создании фрейма косяк возникает при попытке загрузить фрейм из ресурсов:
pFrame->LoadFrame( ...)
В этом методе сбой дает Create( ... )
Далее эстафету перехватывает CreateEx( ... )
Далее ошибка в HWND hWnd = ::AfxCtxCreateWindowEx( ... );
Возвращается NULL.
На мой взгляд, ошибок нигде нет, на Visual Studio 2002 такой ботвы близко не было, а на 2005 — м оно так меня огорчает. Может, все потому, что используется mdb — база данных? Но соединение ароде бы с ней нормально проходит, а до работы с ее данными приложение просто не доживает?