VC6 到 VC2008 的移植日志(1)

时间:2021-12-17 04:00:40

这天遇到如下问题:


第一个问题

 

itoa

strcpy

sprintf

scanf

...

等 C语言的函数 提示不安全 提示用 _s   的 函数替换,itoa 用 itoa_s ,strcpy 用 strcpy_s替换,替换之后,参数多了一个,就是目标

缓冲区的大小。

OK,上面的问题还算顺利。

 

第二个问题

 

for(int i=0;i<10;i++)

{

}

这种写法都要进行修改。因为 微软的语法已经支持了 ISO 的标准语法。

 

第三个问题

 

使用 MSXML 4.0 的问题

 

1> WINVER not defined. Defaulting to 0x0600 (Windows Vista)

1>e:/pkgame/src/commonsrc/cmxmllib/xmlwriter.cpp(22) : error C2872: “IXMLDOMNodePtr”: 不明确的符号

1>        可能是“c:/program files/microsoft visual studio 9.0/vc/include/comdefsp.h(1254) : _com_ptr_t<_IIID> IXMLDOMNodePtr”

1>        with

1>        [

1>            _IIID=_com_IIID<IXMLDOMNode,& _GUID_2933bf80_7b36_11d2_b20e_00c04f983e60>

1>        ]

1>        或       “e:/pkgame/src/commonsrc/cmxmllib/debug/msxml4.tlh(287) : MSXML2::IXMLDOMNodePtr”

1>e:/pkgame/src/commonsrc/cmxmllib/xmlwriter.cpp(23) : error C2872: “IXMLDOMElementPtr”: 不明确的符号

1>        可能是“c:/program files/microsoft visual studio 9.0/vc/include/comdefsp.h(1239) : _com_ptr_t<_IIID> IXMLDOMElementPtr”

1>        with

1>        [

1>            _IIID=_com_IIID<IXMLDOMElement,& _GUID_2933bf86_7b36_11d2_b20e_00c04f983e60>

1>        ]

1>        或       “e:/pkgame/src/commonsrc/cmxmllib/debug/msxml4.tlh(292) : MSXML2::IXMLDOMElementPtr”

 

这个问题 是因为 编译器不知道选择哪个头文件而导致的。

因为 #import "msxml4.dll" 会生成msxml4.tlh 而系统又提供了默认的xml 头文件 comdefsp.h

那么 namespace msxml2 在什么地方呢?在 msxml4.tlh 中是存在的,在系统提供的 comdefsp.h 中 不存在,仅仅声明接口。

而 msxml4.tlh 是 通过 #import "msxml4.dll" 生成的。

经过以上分析:

因为 我们写的代码 IXMLDOMNodePtr 即可以解析为命名空间 MSXML2 中的接口也可以解析为 非命名空间的接口(独立接口),而

导致了混淆。所以我们将 使用 XML接口的地方都加上 MSXML2:: IXMLDOMNodePtr  这样明确声明为MSXML2中的接口编译就可以通过了。

 

在 头文件或者CPP文件前加上 #import "msxml4.dll" 不要加 “using namespace MSXML2; ” 了。