如何将旧的ATL DLL项目添加“ATL简单对象”升级到VS 2010?

时间:2011-12-21 18:54:03

标签: visual-studio visual-studio-2010 atl

我们有一个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支持”的项目?

2 个答案:

答案 0 :(得分:9)

检查this thread out

似乎添加这个片段信息你的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;