2011. 11. 17. 16:50
VC9.0 + MFC + StaticLink 시, gdiplus.dll 오류 해결법
2011. 11. 17. 16:50 in 프로그래밍/Win32
원문 : http://www.indidev.net/forum/viewtopic.php?f=5&t=131
VC6.0를 넘어서는 compiler로 빌드되면 재배포팩 이슈가 항상 따라다닙니다.
그래서, 최초 실행/가동 프로그램(예, 설치프로그램)은 VC6.0으로 빌드하여,
의존성 문제를 원천봉쇄하기도 합니다.
되도록 VC6.0을 역사적 뒤안길로 보내버리기위해,
VC9.0으로 static link로 빌드 하면 문제가 없는 것으로 추측했으나,
gdiplus.dll의 의존성 문제가 발생합니다.
즉,
와 같이 하여 mfc나 msvcrt* 같은 의존성은 없지만,
빌드본을 depends로 확인하면 아래와 같이 gdiplus.dll이 포함됩니다.
그런데, 문제는 Windows 2000 SP4 + IE5등 열약한 환경에서는 기본적으로 시스템에 gdiplus.dll이 포함되지
않습니다! 따라서 아래와 같은 현상이 발생합니다.
(DLL gdiplus.dll을(를) 지정한 경로 .... 에서 찾을 수 없습니다.)
Project Setting 수정으로 모든 방법을 동원해 봤는데, 해결되지 않았습니다.
해결법은, 단순히 theApp 클래스인 CWinAppEx를 CWinApp로 변경하고,
오류가 나면, CWinApp으로 replace해 주면 빌드가 완료되는데,
그 이후로는 gdiplus.dll이 떨어져나가며, 빌드본의 크기가 현격히! 줄어듭니다.
리본 컨트롤등을 사용하지 않는다면, 되도록 CWinApp을 사용하는것이 좋을 듯 합니다.
VC6.0를 넘어서는 compiler로 빌드되면 재배포팩 이슈가 항상 따라다닙니다.
그래서, 최초 실행/가동 프로그램(예, 설치프로그램)은 VC6.0으로 빌드하여,
의존성 문제를 원천봉쇄하기도 합니다.
되도록 VC6.0을 역사적 뒤안길로 보내버리기위해,
VC9.0으로 static link로 빌드 하면 문제가 없는 것으로 추측했으나,
gdiplus.dll의 의존성 문제가 발생합니다.
즉,
와 같이 하여 mfc나 msvcrt* 같은 의존성은 없지만,
빌드본을 depends로 확인하면 아래와 같이 gdiplus.dll이 포함됩니다.
그런데, 문제는 Windows 2000 SP4 + IE5등 열약한 환경에서는 기본적으로 시스템에 gdiplus.dll이 포함되지
않습니다! 따라서 아래와 같은 현상이 발생합니다.
(DLL gdiplus.dll을(를) 지정한 경로 .... 에서 찾을 수 없습니다.)
Project Setting 수정으로 모든 방법을 동원해 봤는데, 해결되지 않았습니다.
해결법은, 단순히 theApp 클래스인 CWinAppEx를 CWinApp로 변경하고,
오류가 나면, CWinApp으로 replace해 주면 빌드가 완료되는데,
그 이후로는 gdiplus.dll이 떨어져나가며, 빌드본의 크기가 현격히! 줄어듭니다.
리본 컨트롤등을 사용하지 않는다면, 되도록 CWinApp을 사용하는것이 좋을 듯 합니다.
'프로그래밍 > Win32' 카테고리의 다른 글
ATL의 A2W, W2A 버그를 수정한 손쉬운 String Encoding 함수 공유(smart pointer) (1) | 2012.06.01 |
---|---|
"이 프로그램이 제대로 설치되지 않았을 수 있습니다." 대처 빌드 방법 (0) | 2011.11.24 |
WinInet으로 HTTP POST File Upload와 Data를 함께 보내기 (2) | 2011.10.17 |
Internet Explorer_Hidden 윈도우 보호하기 (IE Web Control Message Hooking) (0) | 2011.08.20 |
DLL의 메모리릭을 쉽게 찾아 보기 (0) | 2011.04.25 |