Можно ли реализовать интерфейс COM без создания пользовательского интерфейса? - PullRequest
1 голос
/ 25 февраля 2010

Я изучаю с ++ и пытаюсь лучше понять это. Я читал документы MSDN о том, как использовать XML Lite. он сказал, что я должен использовать класс, который реализует интерфейс IStream. Он сказал объявить и создать экземпляр моего класса, который расширяет Istream и использует CComPtr при объявлении переменной. тогда он показал мне следующее.

CComPtr<IStream> pFileStream;
CComPtr<IXmlReader> pReader;

Я немного запутался. если CComptr используется для извлечения XML. почему я должен продлить Почему бы просто не сделать так, чтобы CComptr уже реализовал IStream, а просто вызвать CComptr. Или у CComptr уже есть IStream, и единственный способ для эффективности istream - это расширение, как описано выше ???

Ответы [ 3 ]

1 голос
/ 25 февраля 2010

, если CComptr используется для извлечения xml. почему я должен продлить Почему бы просто не сделать так, чтобы CComptr уже внедрил IStream, и просто вызвать CComptr?
IStream - это интерфейс - высказывание «Я хочу некоторый класс, который реализует этот интерфейс» не говорит о том, как вы хотите получить данные. CComPtr - только указатель на кокласс, который реализует интерфейс - он фактически не реализует сам интерфейс.

Возможно ли реализовать интерфейс COM без создания пользовательского интерфейса?
Я не уверен на 100%, но я не верю, что вам нужно реализовать интерфейс . Однако вам необходимо реализовать сам интерфейс в коклассе.

1 голос
/ 25 февраля 2010

CComPtr<> - это интеллектуальный указатель, используемый для автоматизации управления временем жизни объекта. Он более или менее совпадает с Interface*, где Interface является параметром шаблона CComPtr <> (IStream* или IXmlReader* в этом примере), но предоставляет некоторые дополнительные функции, которые не влияют на указание объекта функционировать.

Итак, CComPtr<IStream> имеет IStream* внутри и перегруженный operator ->(), который перенаправляет вызовы на этот IStream*. То же самое относится к CComPtr<IXmlReader> - внутри него есть IXmlReader*.

0 голосов
/ 25 февраля 2010

На этот вопрос требуется сложный ответ.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...