Возникла такая проблема — на моей машине проект работает. Если откомпилированный или source унести на другую машину и там откомпилить — то прога падает. Падает в этом месте:
Вылетая говорит что Assertion Failed. и что это происходит в mfc42d.dll в файле winocc.cpp.
Когда то с этой проблемой столкнулся и на машине, на которой разрабатывал проект, но вот что сделал чтобы все заработало не помню
Что вообще это может быть??? Не Splitter окна создаются.
Подскажите, если кто что знает.
Здравствуйте, rus blood, Вы писали:
RB>Здравствуйте, mentor, Вы писали:
RB>1. На что именно ругается в winocc.cpp ? RB>2. Что такое CRichBrowserView? Может там используются какие-то контролы, не установленный на другой машине?
1. Ругается на строчку 189. Это первая строчка метода
Здравствуйте, mentor, Вы писали:
M>Здравствуйте, rus blood, Вы писали:
RB>>Здравствуйте, mentor, Вы писали:
RB>>1. На что именно ругается в winocc.cpp ? RB>>2. Что такое CRichBrowserView? Может там используются какие-то контролы, не установленный на другой машине?
M>1. Ругается на строчку 189. Это первая строчка метода
M>
Здравствуйте, Vicont, Вы писали:
M>>2. Это класс наследуемый от CRichEditView больше контролов вроде там нет
V>а на реализуцию CRichBrowserView посмотреть можно?
Здравствуйте, mentor, Вы писали:
M>Здравствуйте, Vicont, Вы писали:
M>>>2. Это класс наследуемый от CRichEditView больше контролов вроде там нет
V>>а на реализуцию CRichBrowserView посмотреть можно?
M>
Нет, а когда ее надо вызвать? Перед созданием splitter? И все-таки на моей то машине все пашет и без него...
V>И еще можешь кинуть какие методы вызываются перед падением.
А как мне это узнать? В Call Stack только вызовы mfc42d.dll и один вызов mfco42.dll но какие там конкретно методы вызываются... Как это посмотреть?
Re[7]: CSplitterWnd.CreateView
От:
Аноним
Дата:
16.08.04 13:49
Оценка:
Здравствуйте, mentor, Вы писали:
M>Здравствуйте, Vicont, Вы писали:
V>>A AfxInitRichEdit() вызывается?
M>Нет, а когда ее надо вызвать? Перед созданием splitter? И все-таки на моей то машине все пашет и без него...
V>>И еще можешь кинуть какие методы вызываются перед падением. M>А как мне это узнать? В Call Stack только вызовы mfc42d.dll и один вызов mfco42.dll но какие там конкретно методы вызываются... Как это посмотреть?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, mentor, Вы писали:
M>>Здравствуйте, Vicont, Вы писали:
V>>>A AfxInitRichEdit() вызывается?
M>>Нет, а когда ее надо вызвать? Перед созданием splitter? И все-таки на моей то машине все пашет и без него...
V>>>И еще можешь кинуть какие методы вызываются перед падением. M>>А как мне это узнать? В Call Stack только вызовы mfc42d.dll и один вызов mfco42.dll но какие там конкретно методы вызываются... Как это посмотреть?
А>ТвойAPP::InitInstance() А>{ А> if(!AfxInitRichEdit()) А> { А> TRACE("Error"); А> return FALSE; А> } А> .... А>}
Если это не сработает пиши какие функции проходит до обвала
Здравствуйте, Vicont, Вы писали:
V>И еще можешь кинуть какие методы вызываются перед падением.
Но могу написать методы, в которых по assert падает:
В файле winsplit.cpp
Тут на первом ассерте:
AFX_STATIC void AFXAPI _AfxDeferClientPos(AFX_SIZEPARENTPARAMS* lpLayout,
CWnd* pWnd, int x, int y, int cx, int cy, BOOL bScrollBar)
{
ASSERT(pWnd != NULL);
ASSERT(pWnd->m_hWnd != NULL);
if (bScrollBar)
{
// if there is enough room, draw scroll bar without border
// if there is not enough room, set the WS_BORDER bit so that
// we will at least get a proper border drawn
BOOL bNeedBorder = (cx <= CX_BORDER || cy <= CY_BORDER);
pWnd->ModifyStyle(bNeedBorder ? 0 : WS_BORDER,
bNeedBorder ? WS_BORDER : 0);
}
CRect rect(x, y, x+cx, y+cy);
// adjust for border size (even if zero client size)if (!afxData.bWin4)
{
if (bScrollBar)
rect.InflateRect(CX_BORDER, CY_BORDER);
else
pWnd->CalcWindowRect(&rect);
}
// adjust for 3d border (splitter windows have implied border)if ((pWnd->GetExStyle() & WS_EX_CLIENTEDGE) ||
pWnd->IsKindOf(RUNTIME_CLASS(CSplitterWnd)))
rect.InflateRect(afxData.cxBorder2, afxData.cyBorder2);
// first check if the new rectangle is the same as the current
CRect rectOld;
pWnd->GetWindowRect(rectOld);
pWnd->GetParent()->ScreenToClient(&rectOld);
if (rect != rectOld)
AfxRepositionWindow(lpLayout, pWnd->m_hWnd, rect);
}
Здест тоже на ASSERT
CWnd* CSplitterWnd::GetPane(int row, int col) const
{
ASSERT_VALID(this);
CWnd* pView = GetDlgItem(IdFromRowCol(row, col));
ASSERT(pView != NULL); // panes can be a CWnd, but are usually CViewsreturn pView;
}
В файле winocc.cpp
BOOL CWnd::SetWindowPos(const CWnd* pWndInsertAfter, int x, int y, int cx,
int cy, UINT nFlags)
{
ASSERT(::IsWindow(m_hWnd));
if (m_pCtrlSite == NULL)
return ::SetWindowPos(m_hWnd, pWndInsertAfter->GetSafeHwnd(),
x, y, cx, cy, nFlags);
else
return m_pCtrlSite->SetWindowPos(pWndInsertAfter, x, y, cx, cy, nFlags);
}
void CWnd::CenterWindow(CWnd* pAlternateOwner)
{
ASSERT(::IsWindow(m_hWnd));
// determine owner window to center against
DWORD dwStyle = GetStyle();
// тут еще много...
}
Здравствуйте, Vicont, Вы писали:
V>Если это не сработает пиши какие функции проходит до обвала
Не сработало.
Я открываю файл, вызывается OpenDocumentFile(PathName)
который вызывает update вьюшек, одной из которых является CRichEditView, и у нее вызывается OnCreateClient, в котором все и падает.
Прихожение у меня мультидоковое, если это имеет значение.
V>>>>A AfxInitRichEdit() вызывается?
M>>>Нет, а когда ее надо вызвать? Перед созданием splitter? И все-таки на моей то машине все пашет и без него...
V>>>>И еще можешь кинуть какие методы вызываются перед падением. M>>>А как мне это узнать? В Call Stack только вызовы mfc42d.dll и один вызов mfco42.dll но какие там конкретно методы вызываются... Как это посмотреть?
А>>ТвойAPP::InitInstance() А>>{ А>> if(!AfxInitRichEdit()) А>> { А>> TRACE("Error"); А>> return FALSE; А>> } А>> .... А>>}
V>Если это не сработает пиши какие функции проходит до обвала
Кстати говоря, MSDN по поводу AfxInitRichEdit() сказал:
[msdn]
AfxInitRichEdit
BOOL AFXAPI AfxInitRichEdit( );
Remarks
Call this function to initialize the rich edit control for the application. It will also initialize the common controls library, if the library hasn’t already been initialized for the process. If you use the rich edit control directly from your MFC application, you should call this function to assure that MFC has properly initialized the rich edit control runtime. If you use rich edit via CRichEditCtrl, CRichEditView, or CRichEditDoc, you don't need to call this function.