在一函数内,自动以隐藏方式打开文档,处理完数据后,自动关闭。在本人机器上没什么问题,但在同事的机器上,会出现异常,经调试,发现是调用OnCloseDocument()的时候发生异常,在之前如果加一个messagebox就没有问题,俺完全不知道是怎么回事拉,那位大虾帮俺看看?
问题代码段:
g_bShowWindow = FALSE;
CDocument* pDoc = AfxGetApp()->OpenDocumentFile(strFlowPath);
...
pDoc->OnCloseDocument();
CChildFrame的ActivateFrame:
void CChildFrame::ActivateFrame(int nCmdShow) 
{
  if( GetMDIFrame()->MDIGetActive() != NULL )   
  { 
  if( g_bShowWindow )
  {
CMDIChildWnd::ActivateFrame(nCmdShow); 
  }
  else
  {
CInitialModule::SetShowWindow( TRUE );
CMDIChildWnd::ActivateFrame( SW_HIDE );
  }
  }   
  else   
  {  
CMDIChildWnd::ActivateFrame(SW_SHOWMAXIMIZED);  
  }   
}出错时的栈:
NTDLL! 77f662ec()
_CrtDbgReport(int 2, const char * 0x5f4ccdd0 THIS_FILE, int 341, const char * 0x00000000, const char * 0x00000000) line 353
AfxAssertFailedLine(const char * 0x5f4ccdd0 THIS_FILE, int 341) line 39 + 20 bytes
CMDIFrameWnd::MDIGetActive(int * 0x00000000) line 341 + 38 bytes
CMDIFrameWnd::GetActiveFrame() line 266 + 10 bytes
CFrameWnd::OnActivate(unsigned int 0, CWnd * 0x0059a9a0 {CTempWnd hWnd=0x0187047e}, int 0) line 987 + 14 bytes
CWnd::OnWndMsg(unsigned int 6, unsigned int 0, long 25625726, long * 0x0012a49c) line 1902
CWnd::WindowProc(unsigned int 6, unsigned int 0, long 25625726) line 1585 + 30 bytes
AfxCallWndProc(CWnd * 0x00346df0 {CWnd hWnd=0x007b0408}, HWND__ * 0x007b0408, unsigned int 6, unsigned int 0, long 25625726) line 215 + 26 bytes
AfxWndProc(HWND__ * 0x007b0408, unsigned int 6, unsigned int 0, long 25625726) line 368
AfxWndProcBase(HWND__ * 0x007b0408, unsigned int 6, unsigned int 0, long 25625726) line 220 + 21 bytes
USER32! 77e42672()
USER32! 77e41024()
NTDLL! 77f663f3()
USER32! 77e62926()
USER32! 77e5740a()
USER32! 77e5b574()
USER32! 77e4357a()
USER32! 77e4c24c()
_AfxActivationWndProc(HWND__ * 0x0187047e, unsigned int 272, unsigned int 2950262, long 1225096) line 404 + 26 bytes
USER32! 77e433c0()
USER32! 77e58a3a()
USER32! 77e5db77()
USER32! 77e625a5()
USER32! 77e62f7e()
USER32! 77e63143()
USER32! 77e7bdad()
USER32! 77e7bd34()
__crtMessageBoxA(const char * 0x0012b274, const char * 0x102579a0 `string', unsigned int 73746) line 65
CrtMessageWindow(int 2, const char * 0x5f4ccdd0 THIS_FILE, const char * 0x0012c3a8, const char * 0x00000000, const char * 0x0012e3cc) line 520 + 22 bytes
_CrtDbgReport(int 2, const char * 0x5f4ccdd0 THIS_FILE, int 341, const char * 0x00000000, const char * 0x00000000) line 419 + 76 bytes
AfxAssertFailedLine(const char * 0x5f4ccdd0 THIS_FILE, int 341) line 39 + 20 bytes
CMDIFrameWnd::MDIGetActive(int * 0x00000000) line 341 + 38 bytes
CMDIFrameWnd::OnUpdateFrameTitle(int 1) line 1072 + 16 bytes
CMDIChildWnd::DestroyWindow() line 463
CDocument::OnCloseDocument() line 801============================以上开始调用OnCloseDocumentFLOWCHARTER! 00460f0b()
FLOWCHARTER! 004bcd3f()
_AfxDispatchCmdMsg(CCmdTarget * 0x0058fd00 {CCmdTarget}, unsigned int 33821, int 0, void (void)* 0x00402a9f, void * 0x00000000, unsigned int 12, AFX_CMDHANDLERINFO * 0x00000000) line 88
CCmdTarget::OnCmdMsg(unsigned int 33821, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 302 + 39 bytes
CView::OnCmdMsg(unsigned int 33821, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 162 + 24 bytes
CFrameWnd::OnCmdMsg(unsigned int 33821, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 894 + 33 bytes
CWnd::OnCommand(unsigned int 33821, long 0) line 2088
CFrameWnd::OnCommand(unsigned int 33821, long 0) line 321
CWnd::OnWndMsg(unsigned int 273, unsigned int 33821, long 0, long * 0x0012fbc4) line 1597 + 28 bytes
CWnd::WindowProc(unsigned int 273, unsigned int 33821, long 0) line 1585 + 30 bytes
AfxCallWndProc(CWnd * 0x0058e0d0 {CWnd hWnd=0x00040462}, HWND__ * 0x00040462, unsigned int 273, unsigned int 33821, long 0) line 215 + 26 bytes
CMDIFrameWnd::OnCommand(unsigned int 33821, long 0) line 55 + 35 bytes
CWnd::OnWndMsg(unsigned int 273, unsigned int 33821, long 0, long * 0x0012fd8c) line 1597 + 28 bytes
CWnd::WindowProc(unsigned int 273, unsigned int 33821, long 0) line 1585 + 30 bytes
AfxCallWndProc(CWnd * 0x00346df0 {CWnd hWnd=0x007b0408}, HWND__ * 0x007b0408, unsigned int 273, unsigned int 33821, long 0) line 215 + 26 bytes
AfxWndProc(HWND__ * 0x007b0408, unsigned int 273, unsigned int 33821, long 0) line 368
AfxWndProcBase(HWND__ * 0x007b0408, unsigned int 273, unsigned int 33821, long 0) line 220 + 21 bytes
USER32! 77e412ae()
USER32! 77e428da()
CWinThread::Run() line 487 + 11 bytes
CWinApp::Run() line 400
AfxWinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x001337c4, int 1) line 49 + 11 bytes
FLOWCHARTER! 004c1368()
FLOWCHARTER! 004c0603()
KERNEL32! 77eebd1e()