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