На этот вопрос требуется сложный ответ.
COM-интерфейсы не являются частью языка C ++. Они могут быть реализованы с использованием разных языков. C ++ - только один из них.
Каждый COM-интерфейс наследует от интерфейса IUnknown, который реализует методы QueryInterface () AddRef () и Release ()
QueryInterface () должен использоваться для запроса интерфейсов COM-объектов. Поскольку каждый COM-интерфейс наследуется от IUnknown, он может вызываться на любом интерфейсе.
Для управления временем жизни объекта необходимо вызывать AddRef () и Release ().
CComPtr <> - это шаблонный класс, реализованный в библиотеке Microsoft ATL, для переноса любого COM-интерфейса, который автоматически вызывает QueryInterface (), AddRef () и Release () при необходимости.
В вашем примере CComPtr pFileStream может использоваться для доступа к членам интерфейса IStream объекта.
http://msdn.microsoft.com/en-us/library/ezzw7k98%28VS.80%29.aspx