Listing 6: get_DirectoryParts() method.

STDMETHODIMP FileEntry::get_DirectoryParts(LPUNKNOWN *pVal)
{
  typedef CComObject<DirectoryPartsCollection> DirPartsColl_t;
  DirPartsColl_t  *pcoll;
  HRESULT         hr = DirPartsColl_t::CreateInstance(&pcoll);
  if(SUCCEEDED(hr))
  {
    directory_parts_type  dirParts( m_entry->directoryParts.begin
                                  , m_entry->directoryParts.end);
    pcoll->AddRef();
    hr = pcoll->Init(static_cast<IFileEntry*>(this), dirParts);
    if(SUCCEEDED(hr))
    {
      hr = pcoll->QueryInterface(pVal);
    }
    pcoll->Release();
  }
  return hr;
}