J'ai une classe C++ non gérée qui a une carte com à l'intérieur. EX:symbole externe non résolu ... QueryInterface
BEGIN_COM_MAP
(MyClass)
COM_INTERFACE_ENTRY(...)
END_COM_MAP
Mais maintenant, à partir de la classe si j'essayer d'appeler this-> QueryInterface je reçois l'erreur suivante:
unresolved external symbol "public: virtual long __stdcall CTest::QueryInterface(struct _GUID const &,void * *)" ([email protected]@@[email protected]@[email protected]) referenced in function "public: __thiscall CTest::CTest(void)" ([email protected]@[email protected])
Mais maintenant, si je tente de mettre en œuvre une méthode QueryInterface I obtenir l'erreur suivante:
error C2535: 'HRESULT CTest::QueryInterface(const IID &,void **) throw()' : member function already defined or declared
Qu'est-ce que je fais mal?
Indépendamment du fait que vous puissiez * appeler * QueryInterface, il s'agit d'une fonction virtuelle, donc le conseil standard * contre * l'appel des méthodes virtuelles des constructeurs s'applique. –
QueryInterface (alias QI) n'est généralement pas appelé par les constructeurs car il repose sur le fait que l'objet a été entièrement construit pour fonctionner. Les objets sont construits à partir de la classe de base, et si le support COM est ajouté en tant que wrapper autour d'une classe de base, QI ne fonctionnera jamais à partir de n'importe quel constructeur le long de la chaîne d'héritage. Ainsi, cette opération est généralement effectuée dans une méthode FinalConstruct ou Initialize. –
Merci pour les réponses les gars. Ce furent de belles explications. – Kyle