Здравствуйте, AstroMan, Вы писали:
AM>LoadFrame в основном зовет Create и посылает WM_INITIALUPDATE дочерним окнам.
AM>Ничего зацепляющего другой фрейм там вроде нет.
AM>Может в коде CPreviewFrame где-то явно зацепляется AfxGetApp()->... (в OnCreate, например).
AM>С моим кодом отличие в том, что я не вызываю LoadFrame, а просто CMDIFrameWnd::Create.
AM>Что в стеке-то при вываливании assert'a? Кто зовет CDocument::AssertValid() и в котором потоке?
Вот Call Stack, все происходит в дополнительном потоке
znz32_d.exe!CWnd::AssertValid() Line 892 + 0x43 bytes C++ //здесь вываливается Assert
znz32_d.exe!CView::AssertValid() Line 500 C++ //
znz32_d.exe!CZnzView::AssertValid() Line 795 C++ //мой пользовательский класс вида используется
//в шаблоне 1, в дополнительном потоке вообще
//надо использовать класс CZnzPreview (вид для шаблона 2)
//который я добавлял к CPreviewApp в InitInstance()
znz32_d.exe!AfxAssertValidObject(const CObject * pOb=0x0237dc98, const char * lpszFileName=0x010040ec, int nLine=882) Line 107 C++
znz32_d.exe!CDocument::AssertValid() Line 883 C++
znz32_d.exe!CZnzDoc::AssertValid() Line 570 C++ //класс документа
znz32_d.exe!AfxAssertValidObject(const CObject * pOb=0x02384218, const char * lpszFileName=0x0102d90c, int nLine=423) Line 107 C++
znz32_d.exe!CDocTemplate::AssertValid() Line 424 C++
znz32_d.exe!CMultiDocTemplate::AssertValid() Line 213 C++ //вот он и зовет CDocument::AssertValid(), хотя если логично
//рассуждать, то не должен, ведь я еще не добавил ни одного документа,
//стало быть эта сволочь обращается к документам которые были открыты
//в основном фрейме, почему?
znz32_d.exe!AfxAssertValidObject(const CObject * pOb=0x0186cab8, const char * lpszFileName=0x01123c88, int nLine=253) Line 107 C++
znz32_d.exe!CBCGKeyboardManager::LoadState() + 0xd0 bytes
znz32_d.exe!CBCGWorkspace::LoadState() + 0x4de bytes
znz32_d.exe!CBCGFrameImpl::OnLoadFrame() + 0x47 bytes
znz32_d.exe!CBCGMDIFrameWnd::LoadFrame() + 0x5d bytes //начало создания фрейма
znz32_d.exe!CPreviewApp::InitInstance() Line 50 + 0x1e bytes C++
znz32_d.exe!_AfxThreadEntry(void * pParam=0x0012f034) Line 113 + 0xd //запуск потока
znz32_d.exe!_callthreadstartex() Line 348 + 0xf bytes C //запуск потока
znz32_d.exe!_threadstartex(void * ptd=0x02b7abb8) Line 331 C //запуск потока
Кстати, если запускать Release версию проги, то она создает фрейм, добавляет документ, с ним даже можно поработать немного!!! После нескольких манипуляций
прога зависает