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

Kri*_*son 7 atl visual-studio-2010 visual-studio

我们有一个DLL项目,它已经存在很长时间了(可能早在Visual Studio 6中),它已针对每个新版本的VS进行了更新.该项目包含使用ATL实现的多个COM类.

升级到VS 2010后,该项目仍然很好.但是,如果我尝试右键单击该项目并选择Add - > Class ... - > ATL Simple Object,我会得到一个错误框,上面写着:

ATL类只能添加到MFC EXE和MFC常规DLL项目或具有完全ATL支持的项目.

这在VS 2008中有效.

当我查看项目属性时,使用MFC设置为使用标准Windows库,并且使用ATL设置为不使用ATL.我将这些更改为分别在共享DLL动态链接中使用MFC,但仍然得到相同的错误.

我知道如何在不使用向导的情况下添加新的ATL对象,我可以尝试使用VS 2010从头开始重新创建项目以使其快乐.但有没有人知道任何简单的方法来让VS允许我使用ATL简单对象向导与一个项目,它不能识别为"具有完全ATL支持"的项目?

Rom*_* R. 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;
Run Code Online (Sandbox Code Playgroud)

这是所有来自的地方,在$(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;
            }
Run Code Online (Sandbox Code Playgroud)