J'essaye de créer un composant COM en utilisant ATL, et je voudrais soulever des événements pour mon client VB. J'ai trouvé de nombreux tutoriels, qui semblent tous varier dans les détails, et aucun d'eux ne semble générer une solution de travail. Voici ce que je fais:Impossible d'obtenir des points de connexion ATL fonctionnant
(Utilisation de Visual Studio 2008):
- Créer une nouvelle ATL projet DLL. Je l'ai appelé
ATLEventTest
. - Class View: Clic droit sur
ATLEventTest
, Ajout d'une nouvelle classe ATL Simple Object. J'ai appelé ceMyObject
, qui a généréCMyObject
,IMyObject
, etc ... Cet objet a été créé avec: a) Appartement Threading b) agrégation c) Interface double d) ISupportErrorInfo e) Les points de connexion
faites un clic droit sur
CProxy_IMyObjectEvents<T>
, cliqué sur 'Ajouter une fonction'- la fonction est de type de retour vide, nommé
someEvent
, et prend unint testParam
. - Reconstruire.
(À ce stade, je devrais être capable de voir un 'Mettre en place un point de connexion' quelque part .. Je ne ...) - Clic droit sur
CMyObject
. 'Ajouter un point de connexion' - Déplacé '
_IMyObjectEvents
' dans la liste. - A fait un code de recherche dans ma solution. Impossible de trouver
someEvent
n'importe où! - Ajout de la fonction
someEvent
. Maintenant, il se trouve dans ATLEventTest_i.h - Doit pouvoir appeler
fire_someEvent(...)
dans mon code, mais ne peut pas.
Cela m'a rendu fou en essayant de faire fonctionner cela. Si quelqu'un peut voir ce que je fais mal, j'apprécierais toutes les corrections, astuces, hacks, etc
À ce stade, je suis tenté de dire que vis les assistants, et juste essayer de modifier le C++ et IDL directement, mais j'ai le sentiment que peut-être pas juste beaucoup mieux :(
Je vous encourage personnellement à le faire sans ATL. Voici un article que j'ai écrit sur ce sujet pour les contrôles ActiveX et JavaScript. Les interfaces et le concept sont essentiellement les mêmes. http://jeffcode.blogspot.com/2008/02/how-to-create-activex-control-that.html –