这天遇到如下问题:
第一个问题
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; ” 了。