반응형
1. 개요
- 예전에 Visual C++6.0에서 만든 MFC 프로젝트를 Visual Studio 2015로 마이그레이션 작업을 진행한 적이 있습니다.
- 해당 마이그레이션 과정에서 발생했던 오류와 이를 해결한 내용을 정리합니다.
2. 오류 및 처리 내용
2.1. error LNK2026: 모듈이 SAFESEH 이미지에 대해 안전하지 않습니다.
- 프로젝트 - 구성 속성 - 링커 - 고급 탭으로 이동한 뒤, '이미지에 안전한 예외 처리기 포함' 항목을 아니요(/SAFESEH:NO}로 변경
2.2. winnt.h(2487,1): error C2118: 첨자가 음수입니다.
- 프로젝트 - 구성 속성 - C/C++ - 전처리기 탭으로 이동한 뒤, 전처리기 정의에 "WINDOWS_IGNORE_PACKING_MISMATCH" 추가한다.
2.3. LINK : fatal error LNK1104: 'LIBC.lib' 파일을 열 수 없습니다.
- 해당 오류의 원인은 Visual Studio가 이제 더이상 단일스레드를 지원하지 않아서라고 한다.
- 해당 라이브러리를 무시하면 된다고 한다.
- 프로젝트 -> 구성 속성 -> 링커 ->입력 탭으로 이동한 뒤, 특정 라이브러리 무시에 libc.lib을 추가한다.
2.4. error D8016 : '/ZI'과(와) '/Gy-' 명령줄 옵션이 호환되지 않습니다.
- 프로젝트 -> 구성 속성 -> C/C++ -> 코드 생성 탭으로 이동한 뒤, 함수수준 링크사용을 예(/Gy)로 설정
2.5. error C2440: 'static_cast': 'int (__thiscall CMainFrame::* )(void)'에서 'AFX_PMSG'(으)로 변환할 수 없습니다.
- ON_COMMAND 수정
ON_COMMAND(IDM_FILE_CONNECT, OnFileConnect) 이것을 ON_COMMAND(IDM_FILE_CONNECT, (AFX_PMSG)OnFileConnect) (AFX_PMSG) 추가하여 수정
2.6. error C2440: 'static_cast': 'int (__thiscall CBottomListView::* )(void)'에서 'AFX_PMSG'(으)로 변환할 수 없습니다.
- ON_MESSAGE 수정
ON_MESSAGE(WM_U_DOCUMENT, OnDocument) 이것을 ON_MESSAGE(WM_U_DOCUMENT, (LRESULT(AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM))OnDocument) ((LRESULT(AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM)) 추가하여 수정
2.7. error C2440: 'static_cast': 'UINT (__thiscall CGuiMiniFrame::* )(CPoint)'에서 'LRESULT (__thiscall CWnd::* )(CPoint)'(으)로 변환할 수 없습니다.
- 함수의 반환값 수정
afx_msg UINT OnNcHitTest(CPoint point); 이것을 afx_msg LRESULT OnNcHitTest(CPoint point); UINT를 LRESULT 변경
2.8. error C2039: 'ReadHuge': 'CStdioFile'의 멤버가 아닙니다.
- Visual Studio 6.0 - CStdioFile 클래스에 ReadHuge() 멤버함수가 있었지만 vs2005 이후에는 ReadHuge() 함수가 사라지고 Read() 함수로 대체되었습니다.
- ReadHuge() 함수를 Read() 함수로 변경합니다.
2.9. error C2316 CFileException ...
- Exception 매개변수 수정
catch (CFileException e) 이것을 catch (CFileException e[]) e에서 e[]로 변경
2.10. error C2039: 'InlineIsEqualGUID': 'ATL'의 멤버가 아닙니다.
- 함수 내용 수정
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid) { static const IID* arr[] = { &IID_IAxNCASign, }; for (int i=0; i<sizeof(arr)/sizeof(arr[0]); i++) { if (::ATL::InlineIsEqualGUID(*arr[i], riid)) return S_OK; } return S_FALSE; } 위 를 다음과 같이 변경 STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid) { static const IID* arr[] = { &IID_IAxNCASign, }; for (int i=0; i<sizeof(arr)/sizeof(arr[0]); i++) { #if _ATL_VER >= 0x700 if (InlineIsEqualGUID(*arr[i], riid)) return S_OK; #else if (::ATL::InlineIsEqualGUID(*arr[i], riid)) return S_OK; #endif } return S_FALSE; } return S_FALSE; }
반응형
'기타정보' 카테고리의 다른 글
[기타] SourceTree(소스트리) 실행이 안되는 경우 조치 (0) | 2024.03.05 |
---|---|
[윈도우10] 윈도우 단축키 (0) | 2020.02.25 |
[윈도우10]윈도우10 화면분할이 안되는 경우 (1) | 2018.02.12 |