2023-06-17 20:58:29 阅读( 7838)
装了windows7,并安装了vs2005,其他工程没有问题,但是构建某个工程时却出现了error:can'tfindmsxml.dll在system32目录下一找才发现原来确实没有这个文件,从虚拟机的xp里拷了个过来,嘿嘿竟然编过了。
安装了Windows7,安装了vs2005。别的项目没问题,建一个项目就出现了。
error: can't find msxml.dll
在system32目录下搜索了一下,发现这个文件真的不存在。我是从虚拟机的xp里面拷贝过来的,其实是编译的。
Windows 7还不是很成熟。虽然比vista好很多,但是要超越xp还有很多细节需要改进。
Microsoft MSxml用于解析xml文件。在xp下使用时,只要用# import msxml.dll编译就可以顺利通过。
当移植项目到Vista,你会遇到找不到msxml.dll的错误。
Originally, msxml.dll was upgraded to msxml6.dll in prospect.
Just change # imported from msxml.dll to # imported from msxml6.dll.
The corresponding use of namespace MSXML is changed to use namespace MSXML2 to compile.
那么Vista下编译好的可执行文件在XP下就不能用了吗?
网上有个方法:
#if (_WIN32_WINNT=0x0600)
#import msxml6.dll
#else
#import msxml.dll
#endif
这种做法没有必要。
以下是一位网友给出的解释:
COM组件的使用方式不同,开发环境和运行环境也不同。开发环境需要最新的SDK来支持最新的操作系统,所以使用# import msxml6.dll,但是到了运行环境
程序不会直接加载到msxml6.dll,而是通过CoCreateInstance加载,并传递PROGID或CLSID。系统将在注册表中找到相应的dll文件。如果它在vista下运行,
系统会帮你加载msxml6.dll,在xp环境下,系统会帮你加载msxml.dll。但是程序不能使用IXmlDocument6,因为这个版本在XP环境下不被msxml.dll支持。
这个特性是COM最基本的特性:保持二进制兼容,即使组件版本升级,也可以在新环境下运行旧版本的程序,因为新版本的组件肯定会保留旧版本的接口。
猜你喜欢
Guessyoulike