【问题标题】:No CComHeapPtr with C++Builder 2010?C++Builder 2010 没有 CComHeapPtr?
【发布时间】:2013-02-26 10:18:17
【问题描述】:

我正在尝试将 CComHeapPtr 智能指针与 Embarcadero C++Builder 2010 一起使用,但在任何提供的标头中都找不到定义。我得到了这个错误。

[BCC32 Error] E2451 Undefined symbol 'CComHeapPtr'

它不在atlbase.h 中(并且atlalloc.h 似乎完全丢失了)。

我打算使用它来对从IShellFolder::ParseDisplayName 返回的ItemIDList 进行异常安全的释放。

它是否存在于这个版本中,还是 C++Builder 只是使用了一个非常旧的 ATL 版本?

而且,除了自己动手,还有更好的选择吗?

【问题讨论】:

  • C++ Builder at all 是否有任何版本的 ATL - 只有非免费版本的 MS Visual Studio 附带的库?毫无疑问,CComHeapPtr 是一个 ATL 类。
  • 是的,确实如此。尤其是 ATLBASE.H(具有 MS 版权),标准的 CComPtr 东西都有效。
  • 它可能是一个简化版本,类似于 WDK 中包含的版本。我不认为CComHeapPtr 一直在 ATL 中,我想它是在 Visual Studio 2002-2003 版本中添加的,是一个相对“新”的类。

标签: com atl c++builder-2010


【解决方案1】:

CComHeapPtr 在 C++Builder 附带的任何 ATL 版本中均不可用。

C++Builder 确实支持 ATL,但它的旧版本。 Microsoft 已停止向第三方授权 ATL,并且最新的 ATL 依赖于 VC++ 特定的编译器扩展。 C++Builder XE 是附带工作 ATL 文件的最后一个版本。 C++Builder XE2 及更高版本仍然支持 ATL,但前提是您拥有早期 C++Builder 版本的 ATL 文件的副本(XE2 的存根文件具有 #error 语句,如果您尝试使用它们会警告您)。现在使用 Embarcadero 自己的 DAX 框架正式支持 ActiveX,该框架不兼容 ATL。

【讨论】:

    猜你喜欢
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2011-12-17
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多