上次把FMF转到VC8后在Vista操作系统上运行时遇到的配置不正确的问题,我当时是采用重新定义缺省的WINVER来解决的。但这只解决了一部份问题,因为生成的程序只能在Vista上运行而不能在XP或者2003上正确运行了。后来查了些资料,确定是清单文件在作怪。由于VC6的工程port到vc8后,缺省会嵌入清单文件到生成的二进制文件中。我采用的办法是:
1、把所用项目的生成清单文件(在连接选项处)和嵌入清单文件(在清单工具处)都置为否,然后重新生成。
2、为主程序以及直接使用的DLL文件生成相应的清单文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86"></assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.MFC" version="8.0.50608.0" processorArchitecture="x86"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
3、生成Microsoft.VC80.MFC.manifest文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<noInheritable/>
<assemblyIdentity
type="win32"
name="Microsoft.VC80.MFC"
version="8.0.50608.0"
processorArchitecture="x86"
/>
<file name="mfc80u.dll"/>
</assembly>
4、生成Microsoft.VC80.CRT.manifest文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<noInheritable/>
<assemblyIdentity
type="win32"
name="Microsoft.VC80.CRT"
version="8.0.50608.0"
processorArchitecture="x86"
/>
<file name="msvcr80.dll"/>
<file name="msvcp80.dll"/>
</assembly>
5、把mfc80u.dll、msvcr80.dll、msvcp80.dll拷贝到同一目录下。
到这里就全部搞定了,生成的程序可以在windows 2000以上的所有操作系统上运行。有一个值得提及的细节是,程序中用LoadLibrary加载的插件并不用生成相应的清单文件。