2013-02-26 38 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。