IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

VC++ 2003 : Impossible d�instancier une classe abstraite


Sujet :

Visual C++

  1. #1
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    165
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Par d�faut VC++ 2003 : Impossible d�instancier une classe abstraite
    Bonjour � tous

    J�ai �cris une class d�rivant de l�interface ITTAPIEventNotification d�rivant elle m�me de l�interface IUnknown comportant une seule fonction virtuelle pure Event que j�ai impl�ment� dans ma classe.
    Mais lorsque j�essai de cr�er un objet de cette classe j�ai erreur suivante :

    Impossible d�instancier une classe abstraite

    Ci � dessous la d�claration de ma classe :

    class CTapiEventNotification : public ITTAPIEventNotification
    {
    // Implementation
    public:
    virtual /*[helpstring][id]*/ HRESULT STDMETHODCALLTYPE Event(
    /*[in]*/ TAPI_EVENT TapiEvent,
    /*[in]*/ IDispatch *pEvent);

    static bool RegisterEvent();
    static bool RegisterCallNotifications(ITAddress* pAddress,
    VARIANT_BOOL fMonitor,
    VARIANT_BOOL fOwner,
    long lMediaTypes);
    };


    J�aimerai savoir si quelqu�un d�autre a d�j� eu ce probl�me et comment il l�a r�solu.

    Merci d�avance pour toute aide.

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par d�faut
    Salut,

    Je sais pas si ca va t'aider mais bon j'avais trouver ca dans la FAQ:
    http://c.developpez.com/faq/cpp/?pag...LASS_abstraite

  3. #3
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    165
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Par d�faut
    Merci, mais cette FAQ ne r�soud pas mon probl�me.

    Mais je me demande si je dois impl�menter les fonctions virtuelles pures (AddRef, Release et QueryInterface) de l'interface IUnknown.
    Etant donn� que je ne vois pas la d�claration de ces fonctions dans l'interface ITTAPIEventNotification.

    Dites moi si je me trompe.
    Merci.

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Ben oui, tu dois : Elles sont d�clar�es dans une interface que tu impl�mentes (ou dont h�rite une interface que tu impl�mentes).
    Par contre, il est anormal qu'elles ne soient pas d�clar�es dans ITTAPIEventNotification : Cela la rend inutilisable en C, � moins que la d�claration C soit � cot� (ce qui est g�n�ralement le cas pour les fichiers d'en-t�te g�n�r�s automatiquement).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    165
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Par d�faut
    J'ai en effet impl�ment� les trois fonctions de l'interface IUnknown et la compilation s'effectue sans erreurs.

    Mon impl�mentation de QueryInterface consiste simplement � cr�er une instance de ma classe que je retourne lorsqu'on appelle QueryInterface avec le param�tre riid=IID_IUnknown ou IID_ITTAPIEventNotification.
    J'appelle enssuite AddRef() sur cette nouvelle instance avant de sortie de la fonction.

    J'esp�re que c'est correct ?

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Non, QueryInterface() retourne un pointeur vers le m�me objet (ou un objet contenu qui impl�mente l'interface, comme fait dans les vieux COM tutorial samples).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Exemple d'impl�mentation de QueryInterface:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class CoUneClasse : public IUnknown
    {
    	//Déclaration des méthodes de IUnknown
     
    	class CImplIUneInterface : public IUneInterface
    	{
    	//Déclaration des méthodes de IUneInterface
    	CoUneClasse *pObj;
    	};
     
    	class CImplIUneAutreInterface : public IUneAutreInterface
    	{
    	//Déclaration des méthodes de IUneAutreInterface
    	CoUneClasse *pObj;
    	};
     
    	friend class CImplIUneInterface;
    	friend class CImplIUneAutreInterface;
    	CImplIUneIterface m_implIUneInterface;
    	CImplIUneAutreInterface m_implIUneAutreInterface;
    };
    Ceci a l'avantage d'�viter tout h�ritage multiple.
    L'impl�mentation de QueryInterface() dans les vieux COM Tutorial Samples retourne alors un pointeur vers l'objet ext�rieur ou l'un des objets contenus qui impl�mentent les autres interfaces.

    Il est aussi possible de faire un h�ritage multiple de toutes les interfaces dans l'objet principal, c'est ce qui est fait dans ATL...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    165
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Par d�faut
    J'ai signal� au depart que ma classe (CTapiEventNotification ) derivait de ITTAPIEventNotification :

    class CTapiEventNotification : public ITTAPIEventNotification
    {

    };

    Le pointeur *pObj (CoUneClasse *pObj que tu mentionnes est cr�e � quel moment ?

    Je pense que je vais aller voir dans les ATL.

    Merci.

  9. #9
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    C'est le pointeur vers l'objet ext�rieur (l'objet COM), cr�� au moment o� l'objet est instanci�.

    Tu l'initialises � this dans le constructeur de l'objet ext�rieur...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    165
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Par d�faut
    Merci beaucoup pour ta r�activit�.
    je pense que j'y suis.

    Mais j'ai �galement un autre souci : QueryInterface me retourne l'erreur :
    "Interface non impl�ment�"
    Et je ne vois pas la raison. j'ai d'ailleurs ouvert une discussion � ce sujet dont le titre est :

    "TAPI2 avec VC++ 2003 : Interface ITStreamControl non impl�ment�"

    si tu pouvais y jeter un coup d'oeil.
    merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Erreur: Impossible d'instancier une classe abstraite
    Par petitnul12 dans le forum C++
    R�ponses: 2
    Dernier message: 16/11/2012, 23h39
  2. R�ponses: 5
    Dernier message: 29/12/2010, 15h13
  3. [D�butant]Passer une classe abstraite en param�tre
    Par Invit� dans le forum D�buter
    R�ponses: 2
    Dernier message: 06/01/2006, 17h56
  4. R�ponses: 2
    Dernier message: 27/03/2005, 16h09
  5. [Debutant] Une classe abstraite en parametre ?
    Par kiroukou dans le forum D�buter
    R�ponses: 8
    Dernier message: 03/02/2005, 15h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo