![]() |
|
![]() ![]() ![]() |
|
spikerok |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 21.7.2010 Репутация: нет Всего: нет |
Есть проект на Visual C++ 5.0. На моем компе все работает нормально, а у заказчика при выполнении метода CWinApp::OpenDocumentFile(...) вылетает сообщение "Не удалось создать новый документ".
Посмотрел по отладчику, сообщение может вызываться в этом куске кода: CDocument* CMultiDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName, BOOL bMakeVisible) { CDocument* pDocument = CreateNewDocument(); if (pDocument == NULL) { TRACE0("CDocTemplate::CreateNewDocument returned NULL.\n"); AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC); return NULL; } ASSERT_VALID(pDocument); BOOL bAutoDelete = pDocument->m_bAutoDelete; pDocument->m_bAutoDelete = FALSE; // don't destroy if something goes wrong CFrameWnd* pFrame = CreateNewFrame(pDocument, NULL); pDocument->m_bAutoDelete = bAutoDelete; if (pFrame == NULL) { AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC); delete pDocument; // explicit delete on error return NULL; } ASSERT_VALID(pFrame); .... } Сообщение показывается в строке AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC); Если кто сталкивался с подобным, подскажите, как быть, плз. |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Дальше надо смотреть CreateNewDocument и CreateNewFrame - кто-то из них не создает то, что надо. Разбирайся дальше.
Кстати, Visual C++ 5.0 - это такая древность, что аж жуть берет. Зачем ты пользуешься этим антиквариатом? Проблема может быть, например, из-за несоответствия библиотек, т.к. у заказчика наверняка в системе более свежие установлены. Но заменять при установке более свежие библиотеки на свои древние - совсем нехорошо. -------------------- ... |
|||
|
||||
spikerok |
|
||||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 21.7.2010 Репутация: нет Всего: нет |
Понятно, что одна из двух функций возвращает NULL, но проблема в том, что посмотреть в отладчике, где именно возникает ошибка, я не могу, т.к. на моем компе никаких ошибок не возникает.
У заказчика тоже стоит версия 5.0, а вот насчет того, что библиотеки одинаковые, не уверен. Сам бы я конечно не стал страдать хренью и работать в этой среде, но приходится на работе поддерживать старый проект. |
||||
|
|||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Хорошо, тогда думаем. Из MFC-кода следует, что CreateNewDocument может не создать документ по 3 причинам:
1) не установлен m_pDocClass 2) этот док-класс не DYNCREATE (т.е. нулевой m_pfnCreateObject) 3) DYNCREATE, но создает не документ, а фиг знает что. 3-е вряд ли, т.к. в коде нет DYNAMIC_CAST, и несоответствие типа вылезло бы позже. В первые 2 пункта можно проверить где-нибудь до вызова в твоем коде - вывести отладочную информацию с помощью OutputDebugString (она и в релизе работает, а посмотреть можно утилиткой DebugView от Руссиновича). Аналогично, смотрим CreateNewFrame - на предмет отказа - тоже класс проверям, затем смотрим, почему бы LoadFrame может отказать и т.д. Соответственно, если эти функции в твоем коде переопределены, посмотреть нужно и твою реализацию. Надеюсь, ход мыслей ясен. -------------------- ... |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |