VC++ 6 에서 ATL Com Project 만들어진 프로젝트를 VC++ 8 로 업그레이드를 할 경우 몇가지의 문제가 발견 되었다.
1. LINK : fatal error LNK1104: 'mtxguid.lib' 파일을 열 수 없습니다.
확인 해보니 더 이상 VC++ 8 버전에서는 'mtxguid.lib'가 존재 하지 않는다.
다른 lib 로 바이너리들이 통합 된것으로 보이며 링커 옵션에 추가 되어 있는 'mtxguid.lib' 를 지우면 된다.
추가적으로 main을 못찾는다는 링크 에러가 발생하면 "ATL에서 CRT 사용 최소화" 옵션을 사용 하지 않는다.
2. GetObjectContext 링크 에러
링크 옵션에 "comsvcs.lib" 를 추가 하면 된다.
3. def 파일의 심볼에 서수 지정 경고
아래와 같이 def 파일의 함수 이름에 서수가 지정 되어 있으면 아래와 같이 경고가 표시 된다
그런 경우 def 파일을 열어서 아래와 같이 서수에 해당하는 부분을 지워 준다.
그 외에 deprecation 되어 있는 CRT 함수들의 경고들은 무시해 주거나 새로운 버전의 CRT 함수를 사용 하면 된다.
ex) sprintf -> sprintf_s
참고 : http://social.microsoft.com/Forums/en-US/vcgeneral/thread/1b44c27b-db1c-4879-9eb9-4bf2a128b88f
1. LINK : fatal error LNK1104: 'mtxguid.lib' 파일을 열 수 없습니다.
확인 해보니 더 이상 VC++ 8 버전에서는 'mtxguid.lib'가 존재 하지 않는다.
다른 lib 로 바이너리들이 통합 된것으로 보이며 링커 옵션에 추가 되어 있는 'mtxguid.lib' 를 지우면 된다.
추가적으로 main을 못찾는다는 링크 에러가 발생하면 "ATL에서 CRT 사용 최소화" 옵션을 사용 하지 않는다.
2. GetObjectContext 링크 에러
링크 옵션에 "comsvcs.lib" 를 추가 하면 된다.
3. def 파일의 심볼에 서수 지정 경고
아래와 같이 def 파일의 함수 이름에 서수가 지정 되어 있으면 아래와 같이 경고가 표시 된다
warning LNK4222: 내보낸 'DllCanUnloadNow' 기호를 서수로 지정하면 안 됩니다.
warning LNK4222: 내보낸 'DllGetClassObject' 기호를 서수로 지정하면 안 됩니다.
warning LNK4222: 내보낸 'DllRegisterServer' 기호를 서수로 지정하면 안 됩니다.
warning LNK4222: 내보낸 'DllUnregisterServer' 기호를 서수로 지정하면 안 됩니다
그런 경우 def 파일을 열어서 아래와 같이 서수에 해당하는 부분을 지워 준다.
EXPORTS
DllCanUnloadNow PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
그 외에 deprecation 되어 있는 CRT 함수들의 경고들은 무시해 주거나 새로운 버전의 CRT 함수를 사용 하면 된다.
ex) sprintf -> sprintf_s
참고 : http://social.microsoft.com/Forums/en-US/vcgeneral/thread/1b44c27b-db1c-4879-9eb9-4bf2a128b88f
'Dev > Windows' 카테고리의 다른 글
COM+ 패키지 활성화별 세션 상태 정리 (0) | 2009.09.22 |
---|---|
Redmine 세팅 (0) | 2009.09.12 |
유니코드(UNICODE), C++ (0) | 2008.10.16 |
VARIANT 에서 객체 추출하기 (0) | 2008.09.09 |
ffmpeg (0) | 2008.04.09 |