【问题标题】:ATL simple object wizard - "Object Xxx already exists" errorATL 简单对象向导 - “对象 Xxx 已存在”错误
【发布时间】:2010-10-12 19:49:40
【问题描述】:

我正在尝试使用 Visual Studio 2005 中的 ATL 简单对象向导在我的 DLL 中创建一个新的 COM 对象。

我输入对象的短名称,所有其他字段都是派生的。

但是,当我在向导中单击下一步时,出现以下错误消息:

Object 'IXxxInterfaceName' already exists

我在整个解决方案中搜索了对 IXxxInterfaceName 的所有引用,但在任何地方都看不到它的定义。

向导如何确定它已经存在?

【问题讨论】:

    标签: c++ visual-studio com visual-studio-2005 atl


    【解决方案1】:

    我从来不知道为什么向导确定对象名称已经存在 - 我猜有些东西被缓存在我无法追踪的地方。

    最后,我在创建它时在接口名称的末尾附加了一个 2 以允许添加它。然后我用 IXxxInterfaceName 替换了所有出现的 IXxxInterfaceName2。此后一切正常。

    如果我找到了这个问题的根本原因,我会更新答案。

    【讨论】:

    • 问题依然存在,现在是 2015 年。删除现有的“ATL 简单对象”意味着您无法重新生成。至少我还没有找到办法。我什至已经从以前的尝试中清除了注册表。微软从未承认过这个问题。
    • 第二次 ATL-Simple-Object 代码生成失败的解决方法是使用自动化创建一个新的 MFC 项目。添加一个 ATL 简单对象类型的新类。然后复制新生成的 . ....rgs 和 .h 和 .cpp 文件添加到您的项目中。
    • 检查您的 .idl 文件。创建“ATL 简单对象”会添加接口语句。删除所有这些添加的行,错误就会消失。
    • 我在添加 .NET C++ 对象时遇到了这个问题。不知道为什么它不起作用,但遵循了这个解决方法(到目前为止成功)
    • 解决这个问题的方法是关闭Vs并从项目目录中删除.db文件
    【解决方案2】:

    它是否在您引用的库中定义?

    【讨论】:

    • 有可能。你能想出一个简单的方法来解决这个问题,而不必对我引用的每个库都使用蛮力吗?
    • 其实现在想来,在我引用的库中使用的可能性不大。接口名称具有我们产品中所有接口使用的标准前缀。所以我怀疑任何第三方库都会使用相同的名称。
    • 真的。这是一个奇怪的。如果您稍微更改名称会发生​​什么?
    • 好吧,我在接口名称的末尾附加了一个 2 并且它起作用了。然后我用 IXxxInterfaceName 替换了所有出现的 IXxxInterfaceName2。似乎可以编译,尽管我在尝试跨 COM 调用 API 方法时仍然遇到问题。希望我今天能弄清楚。
    【解决方案3】:

    也发生在 VS 2008 中。但是,Clean solution 和 Clean project from build option 解决了这个问题:-)

    【讨论】:

      猜你喜欢
      • 2018-03-13
      • 2012-01-25
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多