【问题标题】:ATL::CComContainedObject<contained>: C2259 Cannot instantiate abstract classATL::CComContainedObject<contained>: C2259 无法实例化抽象类
【发布时间】:2019-03-13 21:35:58
【问题描述】:

我有一个 ATL COM 项目,我想移植到 64 位。

在将平台更改为 x64 并开始构建后,我遇到以下错误

ATL::CComContainedObject&lt;contained&gt;: C2259 Cannot instantiate abstract class 在 atlcom.h

我也遇到这个错误

C2338 CAtlDllModuleT&lt;T&gt; must be used with either _WINDLL or _USRDLL 在 atlbase.h

它在 32 位上编译得很好。有谁知道如何解决这个问题? 我找到了这个类似的问题和答案,但我不明白如何在我的案例中应用它。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/d6144eaa-fa37-4133-87a0-75a06633209b/compiling-64bit-results-in-a-2259-cannot-instantiate-abstract-class?forum=vclanguage

我之前发布了一个类似的更广泛的问题:

ATL COM 32-bit dll to 64-bit non-COM dll

【问题讨论】:

  • ATL 与 64 位兼容,但这并不意味着您可以采用任何现有的(旧的?)项目并希望它能够构建没有问题的 Win64。最初的错误非常笼统,它只是意味着定义和实现之间存在问题(可能是参数大小、属性、指针等很多东西)。您可能在类/方法等的详细输出中有更多信息。如果没有更多细节,很难提供帮助。另一种解决方案是使用新的 VS 2017 模板开始一个新项目,并逐个添加文件(更多的工作,但你会知道你在做什么)
  • @SimonMourier 感谢您的评论。看来我犯了一个非常新手的错误。我没有花时间将设置从 32 位配置文件复制到 64 位。很多重要的参数都没有设置好。更新 64 位配置文件后,它的构建没有问题。现在还有待测试 64 位 dll 是否按预期工作。
  • 你应该自己回答

标签: c++ com 64-bit atl


【解决方案1】:

和上面的 cmets 一样,问题的根源在于 Visual Studio 64 位项目文件的设置。很多重要的参数都没有设置好。根据它构建的 32 位配置文件更新 64 位配置文件后,它没有错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    相关资源
    最近更新 更多