2013-02-26 57 views
0

我想用Embarcadero C++ Builder 2010中的CComHeapPtr智能指针,但找不到任何提供的头文件中的定义。我得到这个错误。没有CComHeapPtr与C + + Builder 2010?

[BCC32 Error] E2451 Undefined symbol 'CComHeapPtr' 

这不是在atlbase.h(和atlalloc.h似乎是完全缺失)。

我打算用这个来给出从IShellFolder::ParseDisplayName返回的ItemIDList的异常安全释放。

它是否出现在这个版本中,还是C++ Builder只使用ATL的令人难以置信的旧版本?

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

+0

C++ Builder *是否有任何版本的ATL - 该库仅附带MS Visual Studio的非免费版本?毫无疑问,'CComHeapPtr'是一个'ATL'类。 – 2013-02-26 10:20:19

+0

是的,它当然可以。特别是ATLBASE.H(有MS版权)和标准'CComPtr'的东西都可以。 – Roddy 2013-02-26 10:29:32

+0

它可能是一个简化版本,与WDK中包含的版本类似。我不认为'CComHeapPtr'始终在ATL中,我想它是在Visual Studio 2002-2003版本中添加的,并且是一个相对“新”的类。 – 2013-02-26 10:34:09

回答

1

CComHeapPtr不适用于C++ Builder附带的任何ATL版本。

C++ Builder不支持ATL,但它的旧版本。微软已经停止向第三方授权ATL,而最新的ATL依赖VC++特定的编译器扩展。 C++ Builder XE是工作ATL文件附带的最后一个版本。 C++ Builder XE2以后仍然支持ATL,但前提是你有早期C++ Builder版本的ATL文件副本(XE2有存根文件有#error语句在你尝试使用时会发出警告)。 ActiveX现在正式支持Embarcadero自己的DAX框架,它不兼容ATL。