今天,我在一个已有解决方案中添加了一个ATL服务项目。我点击该项目来添加新的类,选择ATL中的ATL simple object时,弹出了错误提示框。内容如下:ATL classes can only be added to MFC EXE and MFC Regular DLL projects or projects with full ATL support,如果在只包含ATL服务的解决方案中却不会出现上述问题。上网查了一下,这里有着较详细的讨论(
http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/7d9a0bb3-fa2a-416b-8982-aa0fbacb5b45)
具体的解决方法修改Microsoft Visual Studio 9.0\VC\VCWizards\1033\common.js文件中function IsATLProject(oProj)方法。方法中判断是否ATL工程的方法如下:
if (oClass.IsDerivedFrom("CAtlDllModuleT") || oClass.IsDerivedFrom("ATL::CAtlDllModuleT") ||
oClass.IsDerivedFrom("CAtlModuleT") || oClass.IsDerivedFrom("ATL::CAtlModuleT"))
这种判断不够全面,遗漏了ATL服务的判断。所以只要添加ATL服务的情况。
if (oClass.IsDerivedFrom("CAtlDllModuleT") || oClass.IsDerivedFrom("ATL::CAtlDllModuleT") ||
oClass.IsDerivedFrom("CAtlModuleT") || oClass.IsDerivedFrom("ATL::CAtlModuleT") ||
oClass.IsDerivedFrom("CAtlServiceModuleT") || oClass.IsDerivedFrom("ATL::CAtlServiceModuleT"))
保存该脚本,重新为项目添加ATL simple object,不再出现错误。