begin process at 2012 05 29 00:28:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

Com et evenements


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Com et evenements

mercredi 3 décembre 2003 à 10:33:24 | Com et evenements

hilairenicolas


Bonjour,

j'ai un objet com (non activex) et je voudrais qu'il puisse réagir à des evenements.
Avec un activeX, le classwizard me genere automatiquement les BEGIN_EVENT_MAP et autres choses nécessaires, par contre, il refuse de le faire lorsque c'est un objet COM.
Que dois-je faire ?

Merci de votre aide
mercredi 3 décembre 2003 à 16:00:34 | Re : Com et evenements

hilairenicolas


Alors, je crois que j'ai trouvé, mais c'est tout une histoire... Je le mets ici, si y en a que ca interesse.

Alors, c'est un extrait de mon code, avec des commentaires :
(ma classe com est un clavier virtuel (keyboard_com)

alors, il faut dans le .odl (c'est la définition de la méthode qui réagit à l'evenement)


[ uuid(5E01B260-5C15-11cf-A78C-00AA00A70FC2), helpstring("Event interface for Keyboard") ]
dispinterface IKeyboardEvent
{
properties:
// Event interface has no properties
methods:
[id(1)] void KeyPress(short LABEL, VARIANT_BOOL* Cancel);
};


dans le .h qui hérite de CCmdTarget bien sur (on remarque que le guid est contruit)


#define EVENT_PARAM(vtsParams) (BYTE*)(vtsParams)
#include <ole2.h>
#include <initguid.h>
DEFINE_GUID(IID_IKeyboardEvent,
0x5e01b260, 0x5c15, 0x11cf, 0xa7, 0x8c, 0x0, 0xaa, 0x0, 0xa7, 0xf, 0xc2);



en protected : (définition des méthodes qui envoie l'évenement)


void FireEventV(DISPID dispid, BYTE* pbParams, va_list argList);
void AFX_CDECL FireEvent(DISPID dispid, BYTE* pbParams, ...);



ensuite la définition de l'évenement

//{{AFX_MSG(Keyboard_com)
// NOTE - the ClassWizard will add and remove member functions here.
afx_msg void FireKeyPress(short label, BOOL FAR* Cancel);
//}}AFX_MSG
public:
enum {
eventidEvent1 = 1L,
};
protected:
BEGIN_CONNECTION_PART(Keyboard_com, EventConnPt)
CONNECTION_IID(IID_IKeyboardEvent)
END_CONNECTION_PART(EventConnPt)
DECLARE_CONNECTION_MAP()


dans le .cpp :
(dans le constructeur)

EnableConnections();


préciser le point de connexion :

BEGIN_INTERFACE_MAP(Keyboard_com, CCmdTarget)
INTERFACE_PART(Keyboard_com, IID_IConnectionPointContainer, ConnPtContainer)
END_INTERFACE_MAP()

BEGIN_CONNECTION_MAP(Keyboard_com, CCmdTarget)
CONNECTION_PART(Keyboard_com, IID_IKeyboardEvent, EventConnPt)
END_CONNECTION_MAP()



et les méthodes d'envoi :

void Keyboard_com::FireKeyPress(short label, BOOL FAR * cancel)
{
FireEvent(eventidEvent1,EVENT_PARAM(VTS_I2 VTS_PBOOL),label,cancel);
}

void Keyboard_com::FireEventV(DISPID dispid, BYTE* pbParams,va_list argList)
{
COleDispatchDriver driver;

const CPtrArray* pConnections = m_xEventConnPt.GetConnections();
ASSERT(pConnections != NULL);

int i;
int cConnections = pConnections->GetSize();
LPDISPATCH pDispatch;

for (i = 0; i < cConnections; i++)
{
pDispatch = (LPDISPATCH)(pConnections->GetAt(i));
ASSERT(pDispatch != NULL);
driver.AttachDispatch(pDispatch, FALSE);
TRY
driver.InvokeHelperV(dispid, DISPATCH_METHOD, VT_EMPTY, NULL,
pbParams, argList);
END_TRY
driver.DetachDispatch();
}
}

void AFX_CDECL Keyboard_com::FireEvent(DISPID dispid, BYTE* pbParams, ...)
{
va_list argList;
va_start(argList, pbParams);
FireEventV(dispid, pbParams, argList);
va_end(argList);
}


Voila, ca a l'air compliqué comme ca, et effectivement ca l'est ...

Bon courage si y en a qui font pareil :)


Cette discussion est classée dans : activex, objet, evenements


Répondre à ce message

Sujets en rapport avec ce message

Appeler un objet COM ActiveX/DLL en C++. [ par stof35 ] Quelqu'un aurait un bout de code pour réaliser cette action.Merci par avance CLSID et ActiveX [ par bayby ] Bonjour tous le monde,je debute dans la creation d'objet COM en VB.NET. cependant une fois mon objet créé je n'arrive pas à l'utiliser en tant que Act activex et vbscript methode CreateObject [ par DevGizmo ] Bonsoir,Je me confronte a un petit probleme...Je fais un script vbs qui doit a un moment donne creer un objet active x et utiliser certaines de ses fo Objet ActiveX (COM) sous C++ (Visual C++ ou pas) [ par Raksmey ] Bonjour, Je viens à vous pour une question d'ordre général sur la création des objets ActiveX. Je me demandais si certans d'entre vous connaissez un Creer un objet activex [ par EBArtSoft ] Bonjour ,J'ai une dll/activex en vb avec un module de classe nommé"Class1" comprenant une fonction appelé "Execute".J'ai aussi un programme en vc qui API Win32 ActiveX [ par redwarrior2 ] RedWarrior2RedWarrior2Salut,je developpe une application win32 sous visual 5 dans lequel j'ai ajouté des composants activex, seulement je n'ai trouve problème tri d'une liste d'objet ! [ par tomsawyerbelgique ] Bonjour, j'aimerais savoir comment on fait pour surdéfinir un foncteur de tri de liste d'objet. C'est objet sont des pointeurs sur une structure et la pb avec delete c++ [ par djl ] je cree un tableau d'objets dynObjet** objets;objets = new Objet*[l];for(int i=0;icomment on le detruit?car je fait cafor(int i=0;idelete[] objets;e Structure et objet [ par Suisse00 ] Bonjours ! Sauf si je me trompe l'utilisation des objet avec des structure devien une structure dynamic ? Si ses le cas voilà la question sinon commen Comment fait-on fonctionner le contrôle activex "Navigateur Web Microsoft" [ par Memerosti ] Ben tout est dans le titre :=)J'ai crée un projet MFC, et j'aimerais, afficher une page web à l'aide de ce contrôle dans une fenêtre de mon programme.


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,217 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales