我们有一个DLL项目,它已经存在了很长时间(可能早在Visual Studio 6中),已经针对每个新版本的VS进行了更新。该项目包含使用ATL实现的一些COM类。
升级到VS 2010后,该项目仍然可以正常运行。但是,如果我尝试右键单击该项目并选择添加 - > 等级...... - > ATL简单对象,我收到一个错误框,上面写着:
ATL类只能添加到MFC EXE和MFC常规DLL项目或具有完全ATL支持的项目。
这在VS 2008中有效。
当我查看项目属性时,使用MFC 设置为使用标准Windows库并且使用ATL 设置为< strong>不使用ATL 。我将这些更改为分别在共享DLL中使用MFC 和动态链接到ATL ,但仍然会出现相同的错误。
我知道如何在不使用向导的情况下添加新的ATL对象,我可以尝试使用VS 2010从头开始重新创建项目以使其快乐。但有没有人知道任何简单的方法让VS允许我使用 ATL简单对象向导与一个项目,它不能识别为“具有完全ATL支持”的项目?
答案 0 :(得分:9)
似乎添加这个片段信息你的ATL C ++代码使它工作。您不需要实际构建项目,只需在完成向导后删除这些内容(前提是该解决方案适合您)。
// Added fake code begins here
class CAppModule :
public CComModule
{
};
// Added fake code ends here, below is regular ATL project stuff
CAppModule _Module;
这就是$(VisualStudio)\VC\VCWizards\1033\common.js
中的所有内容:
/******************************************************************************
Description: Returns a boolean indicating whether project is ATL-based.
oProj: Project object
******************************************************************************/
function IsATLProject(oProj)
{
try
{
var oCM = oProj.CodeModel;
oCM.Synchronize();
// look for global variable derived from CAtlModuleT
var oVariables = oCM.Variables;
for (var nCntr = 1; nCntr <= oVariables.Count; nCntr++)
{
var oVariable = oVariables(nCntr);
var strTypeString = oVariable.TypeString;
if (strTypeString == "ATL::CComModule" || strTypeString == "ATL::CAutoThreadModule")
{
return true;
}
答案 1 :(得分:3)
这里的问题相同,但项目源已经有了CComModule _Module;
修正了它,基于IsATLProject脚本shown above,将其更改为
**ATL::**CComModule _Module;