http://evax.springnote.com/pages/4607951.xhtml
현재 개발환경에서는 최신 공용 라이브러리 링크에 문제점이 발생하게 되는데 Visual Studio sp1이 설치된 개발머신에서 Visual Studio2008로 컴파일을 할 경우, 메니페스트는 기존 Visual Studio2008용 라이브러리들의 정보가 기술되게 됩니다. 따라서, 개발은 sp1에 포함된 라이브러리에서 되었지만 실행은 구버전의 라이브러리로 되는 현상이 발생하게 됩니다. 이는 tr1과 같은 라이브러리의 새로운 기능이나 MFC의 새로운 기능을 사용했을 때 문제가 될 소지가 더 많게 됩니다.
따라서 최신 버전의 라이브러리 버전을 기술해 주는 작업이 필요한데, 코드상으로 이 부분을 선언 해 줄 수 있습니다.
이름을 보면 알 수 있듯, 이 상수는 현재 사용하고 있는 라이브러리의 버전을 메니페스트에 바인딩 해주는 작업을 합니다. 이 네가지의 상수를 하나로 묶어서 다음과 같이 하나의 상수만 선언해 주어도 4개를 선언한것과 동일한 효과를 거둘 수 있습니다.
이 상수는 프리프로세스에 선언해 주는 것이 좋습니다. stdafx.h에 선언하게 되면 중복선언 되는 케이스가 생길 수도 있고 프로젝트에 따라 프리컴파일드 헤더를 사용하지 않을 경우 선언하는 곳이 모호해질 수 있는 문제가 있습니다.(2009-01-23 revolution 팀장님 감사합니다. ^^) 컴파일이 처음 되는 stdafx.h의 가장 상단 같은 곳에 선언해 주는 것이 좋습니다. Visual Studio 2008 sp1을 설치한 다음 현재 라이브러리 바인드 상수를 선언한 후 애플리케이션을 컴파일 하면 다음과 같이 sp1의 라이브러리 버전으로 바인드 되어 있음을 확인할 수 있습니다. 공용 CRT 라이브러리와 공용 MFC 라이브러리 버전이 9.0.21022.8에서 9.0.30729.1로 변경된 부분에 주목해 주세요.
MFC 를 동적으로 사용할 경우 필요한 dll 로, exe 와 같은 폴더나 시스템 폴더에 존재해야 한다.
// DEBUG 경우 // Visual C++ 6.0 경우 mfc42d.dll mfco42d.dll msvcirtd.dll msvcrtd.dll // Visual C++ 9.0 (2008) 경우 mfc90d.dll mfcm90d.dll msvcpm90d.dll msvcp90d.dll msvcr90d.dll
// RELEASE 경우 // Visual C++ 6.0 경우 mfc42.dll mfco42.dll msvcirt.dll msvcrt.dll // Visual C++ 9.0 (2008) 경우 mfc90.dll mfcm90.dll msvcpm90.dll msvcp90.dll msvcr90.dll |
'비주을스튜디오 Tip' 카테고리의 다른 글
VISUAL_STUDIO 사이트 (0) | 2012.11.05 |
---|---|
Visual Studio 2010 Microsoft Help Viewer (0) | 2012.11.04 |
정규식 (0) | 2012.11.01 |
vs2008 배포 프로젝트 만들기 (0) | 2012.10.31 |
VS 2008 에서 빌드한 실행파일이 다른 컴터에서 실행이 안될때 (0) | 2012.10.31 |