J'apprends le C++ et j'essaie de mieux le comprendre. Je lisais les documents msdn sur la façon d'utiliser XML Lite. il a dit que je dois utiliser une classe qui implémente l'interface IStream. Il a dit de déclarer et d'instancier ma classe qui étend Istream et utilise CComPtr lors de la déclaration de la variable. alors il m'a montré ce qui suit.Est-il possible d'implémenter une interface COM sans créer une interface personnalisée?
CComPtr<IStream> pFileStream;
CComPtr<IXmlReader> pReader;
Je suis un peu confus. si CComptr est utilisé pour extraire le fichier XML. pourquoi dois-je étendre. Pourquoi ne pas simplement avoir CComptr déjà implémenter IStream et simplement appeler CComptr. Ou CComptr a-t-il déjà IStream et le seul moyen pour istream d'être efficace est de s'étendre comme ci-dessus ???
Vous avez raison. C'est assez commun en fait. Par exemple, toutes les extensions Shell implémentent les interfaces COM d'utilisationb par Explorer.exe. Peu d'ajouter des interfaces personnalisées; Explorer ne les utilisera pas, ils seront donc uniquement destinés à un usage interne. – MSalters
Ok, je suis habitué aux langages où si une classe implémente une interface. vous pouvez simplement appeler la classe. Vous n'êtes pas obligé de faire la classe. Je suis sous l'impression qu'en C++, pour que le compilateur prenne note de l'interface, vous devez l'appeler comme la classe . Corrigez-moi si je me trompe. –
numerical25
@ numerical25 Ce n'est pas un problème de langage C++. C'est COM. COM ne fait pas partie de C++. C'est une convention Microsoft au niveau binaire. Vous pouvez également implémenter des objets COM dans C. http://en.wikipedia.org/wiki/Component_Object_Model – sergiom