Visual c++ 使用MSVC 2010命令行工具编译ATL程序需要哪些选项?

Visual c++ 使用MSVC 2010命令行工具编译ATL程序需要哪些选项?,visual-c++,atl,Visual C++,Atl,我正在尝试使用Windows SDK 7.1中的MS命令行工具构建ATL程序。我安装了Windows驱动程序工具包7.1.0,以获取ATL头文件和库,在大多数情况下,我都取得了成功。我可以使用MSBuild或nmake的自定义makefile为x86系统完美地构建它,但当我尝试为x64构建它时,会出现以下错误: <project>\include\atl71\atlplus.h(21): error C3360: 'ATL4': cannot create IAttributeHan

我正在尝试使用Windows SDK 7.1中的MS命令行工具构建ATL程序。我安装了Windows驱动程序工具包7.1.0,以获取ATL头文件和库,在大多数情况下,我都取得了成功。我可以使用MSBuild或nmake的自定义makefile为x86系统完美地构建它,但当我尝试为x64构建它时,会出现以下错误:

<project>\include\atl71\atlplus.h(21): error C3360: 'ATL4': cannot create IAttributeHandler [<project>.vcxproj]
<project>\include\atl71\atlplus.h(21): fatal error C1903: unable to recover from previous error(s); stopping compilation [<project.vcxproj]
  0 Warning(s)
  2 Error(s)

真正令人讨厌的是,使用完全相同的解决方案文件和配置,VisualStudio可以很好地构建x64版本。显然,我遗漏了一些东西,因为所有这些工具都使用相同版本的cl.exe来执行实际编译…

使用以下脚本创建一个批处理文件,然后运行它:

pause
setx DevEnvDir %%VSINSTALLDIR%%\Common7\IDE\
setx Framework35Version v3.5
setx FrameworkDir C:\Windows\Microsoft.NET\Framework\
setx FrameworkVersion v4.0.30319
setx LIBPATH %%FrameworkDir%%%%FrameworkVersion%%;%%FrameworkDir%%%%Framework35Version%%
setx PATH ""
setx PATH "%%DevEnvDir%%;%%VSINSTALLDIR%%\VC\Bin;%%VSINSTALLDIR%%\Common7\Tools;%%FrameworkDir%%%%FrameworkVersion%%;%%FrameworkDir%%%%Framework35Version%%;%%VSINSTALLDIR%%\VC\VCPackages;%%PATH%%"
setx VC_PROJECT_ENGINE_NOT_USING_REGISTRY_FOR_INIT 1
setx VCINSTALLDIR %%VSINSTALLDIR%%\Bin\
setx VS100COMNTOOLS ""
setx VSINSTALLDIR "D:\Program Files\Microsoft Visual Studio 10.0"

我在使用完整的DevStudio IDE时遇到了同样的问题。我的操作与您将Win32设置复制到x64目标平台I配置管理器的操作完全相同,但始终收到相同的恼人消息。我通过不使用WinSDK v7.1工具链解决了这个问题,WinSDK v7.1工具链在项目的属性页中是可选的:具体来说,在配置属性节点中,是常规项。该属性再次被称为平台工具集,所有这些都在IDE中,我将下拉列表中的选择从Windows7.1SDK更改为v100。后者声称只利用DevStudio工具和实用程序来构建几乎所有的东西,例如HTML帮助编译器仍然是外部的。我有一个理论,如果你从微软下载最新和最伟大的ATL。 我希望这则小新闻能帮助你朝着正确的方向前进。祝你好运
S.Sean Stagner

您正在使用Visual Studio Express吗?这是使用13年前版本的ATL的唯一理由。我尽量不使用Visual Studio。。。不过,我使用ATL 7是因为代码是使用Visual Studio.Net 2003编写的,我希望在考虑更新它之前能够按原样构建它。最好使用随Visual Studio一起安装的ATL,并在出现问题时适当更新代码。使用早期的ATL版本只会带来不必要的痛苦。问题的关键是,我买不起ATL附带的Visual Studio版本的许可证。为什么为ATL 7编写的代码不应该针对ATL 7进行编译,或者更多的是关于较新的编译器与较旧的ATL的结合?如果根据ATL8编译,使用ATL7编写的代码可能工作正常吗?同时,我也发现了问题所在,遇到了一个新的甚至更有趣的问题。问题相应更新问题是您使用WDK作为免费ATL的来源,并且ATL不完整。引用自WDK:ATL包含在WDK中,以方便需要为其驱动程序创建Windows小程序的驱动程序开发人员。ATL不应用于超出此范围的软件开发。如果原始的基于ATL的代码使用的是VS 2003 ATL,我想您可以编译此代码的唯一ATL就是包含在商业Visual Studio中的ATL。这与此无关。问题假设未安装Visual Studio。