随笔 - 64, 文章 - 11, 评论 - 12, 引用 - 0
数据加载中……

在ATL服务项目中添加COM对象时报错

      今天,我在一个已有解决方案中添加了一个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,不再出现错误。


posted on 2010-03-24 20:12 Robertxiao 阅读(1284) 评论(1)  编辑 收藏 引用

评论

# re: 在ATL服务项目中添加COM对象时报错  回复  更多评论   

解决办法:
[module(name="x")]
class xxx
{....
项目任意类定义上加入[module(name="x")]即可。具体原因,见D:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\2052\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;
}
.....
2012-10-16 14:12 | 阿凡达是

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理