我是一名刚开始学习MFC的大学生,最近和几名学长一起编了一个简单的P2P通信软件,但是发现程序一运行就会出现
ASSERT(afxCurrentResourceHandle != NULL)
的错误。只在DEBUG版本有,RELEASE版本没有这个问题。而且只要选“忽略”,程序就能正常运行。
从断言上看,是资源句柄不为空,但是程序刚开始运行(连OnInitDialog()都还没有执行),怎么会出现有这种错误呢?请问各位高手,这是怎么回事呢??
我刚刚开始学,分很少,请见谅。

解决方案 »

  1.   

    你们程序里是不是把资源放dll了?调用过afxsetsource之类的函数吧
      

  2.   

    这是因为资源不在当前模块中,而再dll中,这种情况瞎,需要afxSetResourceHandle设置模块得
      

  3.   


    我没有用DLL啊。刚开始学,还不会用呢。
    我在整个程序中都查了,也没有调用afxsetsource啊。嘿嘿,我是个新手,不太明白是怎么回事。能不能说的稍微详细一点点,谢谢了!
      

  4.   

    呀,不太明白啊,我刚开始学,还不会用 Dll 呢。
    我的程序里也没有这种文件啊。
    嘿嘿,我是个新手,刚开始学。高手能不能说得稍微详细一点点,或者告诉我应该去看书的那一部分内容。
    谢谢啊,谢谢!
      

  5.   

    debug F5调试运行,出这个提示时候如果有重试就点它,然后看看断在那行代码,把附近的代码全贴上来,并且把函数调用栈贴上来
      

  6.   

    哎呀,太感谢了!谢谢谢谢!//afxwin1.int#ifdef _AFXWIN_INLINE// Global helper functions
    _AFXWIN_INLINE CWinApp* AFXAPI AfxGetApp()
    { return afxCurrentWinApp; }
    _AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
    { ASSERT(afxCurrentInstanceHandle != NULL);
    return afxCurrentInstanceHandle; }
    _AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()
    这里出错!!{ ASSERT(afxCurrentResourceHandle != NULL);
    return afxCurrentResourceHandle; }
    _AFXWIN_INLINE void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource)
    { ASSERT(hInstResource != NULL); afxCurrentResourceHandle = hInstResource; }
    _AFXWIN_INLINE LPCTSTR AFXAPI AfxGetAppName()
    { ASSERT(afxCurrentAppName != NULL); return afxCurrentAppName; }
    _AFXWIN_INLINE COleMessageFilter* AFXAPI AfxOleGetMessageFilter()
    { ASSERT_VALID(AfxGetThread()); return AfxGetThread()->m_pMessageFilter; }
    _AFXWIN_INLINE CWnd* AFXAPI AfxGetMainWnd()
    { CWinThread* pThread = AfxGetThread();
    return pThread != NULL ? pThread->GetMainWnd() : NULL; }Disassenbly
    --- F:\9782\vc98\mfc\mfc\include\afxwin1.inl  ----------------------------------
    1:    // This is a part of the Microsoft Foundation Classes C++ library.
    2:    // Copyright (C) 1992-1998 Microsoft Corporation
    3:    // All rights reserved.
    4:    //
    5:    // This source code is only intended as a supplement to the
    6:    // Microsoft Foundation Classes Reference and related
    7:    // electronic documentation provided with the library.
    8:    // See these sources for detailed information regarding the
    9:    // Microsoft Foundation Classes product.
    10:
    11:   // Inlines for AFXWIN.H (part 1)
    12:
    13:   #ifdef _AFXWIN_INLINE
    14:
    15:   // Global helper functions
    16:   _AFXWIN_INLINE CWinApp* AFXAPI AfxGetApp()
    17:       { return afxCurrentWinApp; }
    5F47D350   push        ebp
    5F47D351   mov         ebp,esp
    5F47D353   call        AfxGetModuleState (5f492691)
    5F47D358   mov         eax,dword ptr [eax+4]
    5F47D35B   pop         ebp
    5F47D35C   ret
    18:   _AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
    19:       { ASSERT(afxCurrentInstanceHandle != NULL);
    5F47D35D   push        ebp
    5F47D35E   mov         ebp,esp
    5F47D360   push        ebx
    5F47D361   push        esi
    5F47D362   push        edi
    5F47D363   call        AfxGetModuleState (5f492691)
    5F47D368   cmp         dword ptr [eax+8],0
    5F47D36C   jne         AfxGetInstanceHandle+22h (5f47d37f)
    5F47D36E   push        13h
    5F47D370   push        offset _szAfxWinInl (5f4ae1d8)
    5F47D375   call        AfxAssertFailedLine (5f478f30)
    5F47D37A   test        eax,eax
    5F47D37C   je          AfxGetInstanceHandle+22h (5f47d37f)
    5F47D37E   int         3
    5F47D37F   xor         eax,eax
    5F47D381   test        eax,eax
    5F47D383   jne         AfxGetInstanceHandle+6 (5f47d363)
    20:           return afxCurrentInstanceHandle; }
    5F47D385   call        AfxGetModuleState (5f492691)
    5F47D38A   mov         eax,dword ptr [eax+8]
    5F47D38D   pop         edi
    5F47D38E   pop         esi
    5F47D38F   pop         ebx
    5F47D390   pop         ebp
    5F47D391   ret
    21:   _AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()
    22:       { ASSERT(afxCurrentResourceHandle != NULL);
    5F47D392   push        ebp
    5F47D393   mov         ebp,esp
    5F47D395   push        ebx
    5F47D396   push        esi
    5F47D397   push        edi
    5F47D398   call        AfxGetModuleState (5f492691)
    5F47D39D   cmp         dword ptr [eax+0Ch],0
    5F47D3A1   jne         AfxGetResourceHandle+22h (5f47d3b4)
    5F47D3A3   push        16h
    5F47D3A5   push        offset _szAfxWinInl (5f4ae1d8)
    5F47D3AA   call        AfxAssertFailedLine (5f478f30)
    5F47D3AF   test        eax,eax
    5F47D3B1   je          AfxGetResourceHandle+22h (5f47d3b4)
    5F47D3B3   int         3   (停在这里了!!!!)
    5F47D3B4   xor         eax,eax
    5F47D3B6   test        eax,eax
    5F47D3B8   jne         AfxGetResourceHandle+6 (5f47d398)
    23:           return afxCurrentResourceHandle; }