구글링을 해보면 MSDN에 아래와 같이 나온다.
C4748
http://msdn.microsoft.com/ko-kr/library/ms235398(v=vs.80).aspx
C4742
http://msdn.microsoft.com/ko-kr/library/k334t9xx(v=vs.80).aspx
하지만...
뭔가 난해하고 단순 명료하고 응용하기 어려운 저 샘플은 뭐란 말인가...
실무용 코드는 더 복잡 난해하고 개판인 경우가 많단 말이다!!!
C4748의 경우 컴파일 옵션 문제이다.
프로젝트 속성의 프로젝트 컴파일 옵션에는 분명 /O2가 적용되어 있다.
하지만 솔루션 탐색기에서 각 소스 파일하나하나 속성을 확인해 보면 컴파일 옵션에 /O2가 빠져있다.
이건 MSDN에도 없다고!!!
젠... 이건 뭥미?
VS 하위버전에서 상위 버전으로 컨버팅 시 문제인지 아니면 원래 프로젝트 생성 시점부터 문제였는지 확인 불가능
대형 프로젝트의 경우 수정해야 하는 파일 갯수가 너무 많아서 GG
결국 메모장에서 .vcxproj파일을 까서 일괄 수정 하였다.
'프로젝트 구성 이름|x64'">Disabled</Optimization>
'프로젝트 구성 이름|x64'">MaxSpeed</Optimization>
'프로젝트 구성 이름|x64'">EnableFastChecks</BasicRuntimeChecks>
'프로젝트 구성 이름|x64'">Default</BasicRuntimeChecks>
위와 같이 수정 후 C4748에 대한 warning는 수정 완료!!!
---------------------------------------------------------------------------------------------------
C4742 이건 구조체 사이즈가 서로 다르다는 뭐 그런 저런 얘기...
근데!!!
warning 라인을 아무리 찾아봐도 해당 내용을 찾을 수 없었다.
젠...
atl어쩌고 관련 warning가 많이 나왔는데...
혹시나 하고 의심가는 부분은...
x86프로젝트를 x64로 컨버팅 과정에서
<atlcoll.h>
<commctrl.h>
<windows.h>
등 윈도우 관련 헤더들에 _WIN64 전처리기 처리 했을 경우 기본 8바이트로 체크하게 되어 있는 것 같다. (시간상 거기까지 분석할 수 없음)
프로젝트 기본 속성에 구조체 멤버맞춤이 1바이트로 되어 있는 경우
위 부분에서 구조체 사이즈가 다르다고 warning을 뱉어낸다.
위 헤더들을 _WIN64일 경우 기본 8바이트로 처리하도록 작업해 준다.
#ifdef _WIN64
#pragma pack(8)
#include <windows.h>
#include <atlcoll.h>
#pragma pack()
#endif // _WIN64
이로써 C4742도 해결!!!
찜찜한 warning 두개 덕분에 하루를 날렸다.
내 시간 어쩔...
'Development > 삽질의 추억' 카테고리의 다른 글
Windows7 에서 VS2003 다운 문제 (0) | 2013.05.06 |
---|---|
fatal error C1033: '' 프로그램 데이터베이스를 열 수 없습니다. (0) | 2012.11.16 |
윈도우 XP에서 윈도우7 공유폴더 접근 안 될때 (0) | 2011.08.30 |
Windows Application의 Minimize의 비밀 (0) | 2011.08.13 |
VB에서 파일 수정일자 가져오는 함수 (0) | 2011.08.13 |
안정적인 DNS서비스 DNSEver