Study/에러 정리

mfc140ud.dll, afxwin1.inl Assertion 에러

Juzdalua 2025. 1. 6. 18:00

afxwin1.inl 파일은 ASSERT를 계속 걸어 핸들 혹은 다이아로그를 확인한다고 한다.

// afxwin1.inl
...

#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; }
        
...

발생 상황)

  • 빌드 컴퓨터에서 빌드된 실행파일을 실행 컴퓨터로 옮겨서 실행중이었다.
  • GetCurrentDirectory 함수를 사용하고 난 후 발생했다.

갑자기 잘 실행되던 mfc 프로그램에 에러가 발생했다.

중단, 다시 시도 버튼을 누르면 프로그램이 종료된다.

무시를 누르면 프로그램이 정상작동한다.


에러 상황)

  • mfc140ud.dll 파일은 존재한다. 파일이 없으면 실행 자체가 안된다고 한다.
  • 디버그 모드에서만 발생한다고 한다. 그럼에도 지나칠 수 없었다.
  • ASSERT 에러로 윈도우 핸들이나 다이아로그 포인터를 사용할 수 없을 때 발생한다고 한다.

 

너무 두루뭉술하다.

어쩔 수 없이 실행 컴퓨터에 프로젝트를 옮기고 콜스택을 확인하기로 했다.

콜스택이 비어있다. 그래서 중단점으로 체크했다.


원인)

  • 리소스 파일에서 읽어오던 아이콘 파일을 가져올 수 없어 발생한 에러였다.

 

경로를 탐색하는 함수를 사용한 이후로 문제가 생긴 것 같다.

아이콘을 가져오는 로직도 GetCurrentDirectory 함수를 사용하여 수정했다.


6시간을 헤맸다.

서버 개발자인데 응용프로그램에 이러고 있으니 현타가 온다.