2009-07-21 7 views
3

J'ai un projet ATL/COM, dans VC++ 6. Je veux une classe existante, qui n'a jamais été définie auparavant pour élever des événements, pour élever des événements. Pour ce faire, la classe devra implémenter un "point de connexion".Créer un nouveau point de connexion dans VC++ 6?

Ces événements sont d'un type qu'aucune classe n'a jamais soulevé auparavant, donc je vais devoir créer un nouveau point de connexion, plutôt que de réutiliser un existant. Je sais comment implémenter un point de connexion dans une classe - cliquez avec le bouton droit sur la classe dans la vue de classe, sélectionnez «Implémenter le point de connexion» et sélectionnez le point de connexion approprié dans la liste affichée.

Je sais comment créer un nouveau point de connexion, tant qu'il est associé à une nouvelle classe ATL pour l'implémenter - cochez la case "Support Connection Points" lors de la création de la classe.

Mais je ne peux pas comprendre comment créer un nouveau point de connexion sans créant une nouvelle classe ATL qui l'implémente.

J'ai modifié le IDL d'inclure quelque chose de similaire aux définitions des points de connexion existants:

[ 
    uuid(*blah blah blah*), 
    helpstring("_IBlahEvents Interface") 
] 
dispinterface _IBlahEvents 
{ 
    properties: 
    methods: 
    [id(1), helpstring("method BlahChanged")] HRESULT BlahChanged(); 
}; 

(Il est évident que j'ai un UUID réel, pas « bla bla bla »). Après cela, l'interface _IBlahEvents apparaît dans la vue de classe. Mais lorsque je clique avec le bouton droit sur la classe ATL que je veux implémenter _IBlahEvents et sélectionne "Implement Connection Point", _IBlahEvents n'apparaît pas dans la liste des points de connexion existants.

J'ai recompilé, y compris le nettoyage et la reconstruction de tous.

Qu'est-ce qui me manque?

Merci.

Répondre

0

Avez-vous ajouté cette classe de base?

public IConnectionPointContainerImpl<CYOUR_CLASS_HERE> 

Si ce n'est pas, créez un nouveau projet à partir de zéro qui correspond à celui-ci, sauf cochez la case « Support Points de connexion ».

Assurez-vous d'utiliser les mêmes noms. Ensuite, diff cela par rapport au projet d'origine pour voir ce qui manque.

0

Si vous avez modifié manuellement le fichier IDL, vous devez également effectuer cette opération manuellement. C'est - dans la coclasse ajouter ce qui suit:

[default, source] dispinterface _IBlahEvents; 
Questions connexes