VC6 to VC9 Migration

coathanger의 이미지

안녕하세요.

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을 가리킵니다..

윈도우 개발자 선배님들의 조언이 필요합니다.

감사합니다.

mg2000의 이미지

http://www.codeguru.com/forum/showthread.php?p=1791863

결론은 using namespace MSXML2;를 사용하지 말고...

MSXML2::IXMLDOMNode 이렇게 명시적으로 사용하면 해결된다고 하네요.

coathanger의 이미지

IXMLDOMNode과 같은 XML관련 심볼들은 import된 dll에 존재합니다.
현재 에러가 발생하는 프로젝트 코드에는 전혀 존재하지 않거든요..

그 dll 코드에는 명시적으로 MSXML2::IXMLDOMNode 로 하여 답변주신 형태로 바꾼 후 정상적으로 컴파일 하였음에도 불구하고 그 dll을 다른 프로젝트에 import 했더니 MSXML2::가 실제로 붙지 않은 걸로 나오네요...

사실 dll 파일을 생성하는 소스코드 내에서는 MSXML2::를 붙일 곳이 많아 아래와 같이 재정의 하였습니다.

#define IXMLDOMNode   MSXML2::IXMLDOMNode

실제 각 코드에 MSXML2:: 를 붙이지 않아서 그런 것일까요....

이 프로그램이 DLL을 임포트 하지 않는다면 쉽게 위 답변의 해결책 처럼 해결 가능하지만..
제 경우는 조금 다릅니다;; 아..

cynicjj의 이미지

음... 추측성 발언 하나...

using namespace MSXML2;

위 문장뒤에는 #include 나 #import 가 오면 안 됩니다.

따라서 .h 파일에는 저 문장이 없어야 하고,

.cpp 파일에서도 앞부분에 있으면 안 되겠죠.

coathanger의 이미지

일단.. 아래와 같이 두 줄을 주석처리 하였습니다.

//#import "msxml4.dll" 
//using namespace MSXML2;
 
#import "../Runtime/TESTV9D.dll" no_namespace named_guids 

그랬더니.. 아래와 같은 에러가 출력됩니다.
가만히 보니.. msxml.h를 어디선가 include하고 있는 것 같은데.. msxml.h를 인식 못하게 할 수 있는 방법 없을까요..?

MSXML2::를 소스코드에 직접 수정할 수 없습니다. COM으로 되어있어서리.. 또한 앞서 언급하였지만 COM에서는 모두 MSXML2::를 붙여준 상태고요.
(근본적인 문제는.. 중복된다는 것인데..)

다양한 테스트를 하고 있습니다. -_-;; 컴파일 될때 까지..

1>c:\documents and settings\superman\desktop\새 폴더\wrapper\debug\logv9d.tlh(130) : error C2011: 'IXMLDOMImplementation' : 'struct' type redefinition
1>        c:\program files\microsoft sdks\windows\v6.1\include\msxml.h(406) : see declaration of 'IXMLDOMImplementation'

neogeo의 이미지


msxml.h 을 열어서

#ifndef __MSXML_H__

등의내용이 헤더 윗부분에 있을것이므로, 먼저 그 부분을 define 해버리시면 될 것 같습니다. 적절히 순서 조절하면 잘 되겠지요?

Neogeo - Future is Now.

Neogeo - Future is Now.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.