VC6 to VC9 Migration
글쓴이: coathanger / 작성시간: 월, 2008/12/15 - 1:51오후
안녕하세요.
VC6에서 VC9로 Migration 해보신분 있으신지요?
현재 진행중인데.. xml 쪽에 문제가 ;;
VC6에서는 아주 잘.. 쭈욱~ 잘 컴파일되고 사용하던 프로그램인데 VC9에서 컴파일 조차 안됩니다..;;
프로젝트는 미리컴파일된 헤더를 사용하고요..
해당 프로젝트 이전에 먼저 ATL COM으로 된 프로젝트의 output file인 TESTV9D.dll을 임포트하여 사용합니다.
StdAfx.h는 다음이 포함되어있습니다.
#import "msxml4.dll" using namespace MSXML2; #import "../Runtime/TESTV9D.dll" no_namespace named_guids
대략 위 코드를 포함하여 컴파일하게 되면.. 아래와 같은 에러가 출력됩니다. 물론 이와 같은 에러는 무수히 많습니다;;
1>d:\work\source\vs2008\lib\stdafx.h(48) : error C2872: 'IXMLDOMNode' : ambiguous symbol
1> could be 'c:\program files\microsoft sdks\windows\v6.1\include\msxml.h(531) : IXMLDOMNode'
1> or 'd:\work\source\vs2008\lib\\debug\msxml4.tlh(2836) : MSXML2::IXMLDOMNode'
일단 첫번 째 줄 stdafx.h(48)은 import한 dll을 가리킵니다..
윈도우 개발자 선배님들의 조언이 필요합니다.
감사합니다.
Forums:
해외 사이트에 비슷한 사례가 있네요.
http://www.codeguru.com/forum/showthread.php?p=1791863
결론은 using namespace MSXML2;를 사용하지 말고...
MSXML2::IXMLDOMNode 이렇게 명시적으로 사용하면 해결된다고 하네요.
하지만..문제가..
IXMLDOMNode과 같은 XML관련 심볼들은 import된 dll에 존재합니다.
현재 에러가 발생하는 프로젝트 코드에는 전혀 존재하지 않거든요..
그 dll 코드에는 명시적으로 MSXML2::IXMLDOMNode 로 하여 답변주신 형태로 바꾼 후 정상적으로 컴파일 하였음에도 불구하고 그 dll을 다른 프로젝트에 import 했더니 MSXML2::가 실제로 붙지 않은 걸로 나오네요...
사실 dll 파일을 생성하는 소스코드 내에서는 MSXML2::를 붙일 곳이 많아 아래와 같이 재정의 하였습니다.
실제 각 코드에 MSXML2:: 를 붙이지 않아서 그런 것일까요....
이 프로그램이 DLL을 임포트 하지 않는다면 쉽게 위 답변의 해결책 처럼 해결 가능하지만..
제 경우는 조금 다릅니다;; 아..
음... 추측성 발언
음... 추측성 발언 하나...
using namespace MSXML2;
위 문장뒤에는 #include 나 #import 가 오면 안 됩니다.
따라서 .h 파일에는 저 문장이 없어야 하고,
.cpp 파일에서도 앞부분에 있으면 안 되겠죠.
이렇게 해보았습니다. 그래도~!
일단.. 아래와 같이 두 줄을 주석처리 하였습니다.
그랬더니.. 아래와 같은 에러가 출력됩니다.
가만히 보니.. msxml.h를 어디선가 include하고 있는 것 같은데.. msxml.h를 인식 못하게 할 수 있는 방법 없을까요..?
MSXML2::를 소스코드에 직접 수정할 수 없습니다. COM으로 되어있어서리.. 또한 앞서 언급하였지만 COM에서는 모두 MSXML2::를 붙여준 상태고요.
(근본적인 문제는.. 중복된다는 것인데..)
다양한 테스트를 하고 있습니다. -_-;; 컴파일 될때 까지..
msxml.h 을 열어서
msxml.h 을 열어서
#ifndef __MSXML_H__
등의내용이 헤더 윗부분에 있을것이므로, 먼저 그 부분을 define 해버리시면 될 것 같습니다. 적절히 순서 조절하면 잘 되겠지요?
Neogeo - Future is Now.
Neogeo - Future is Now.
댓글 달기