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

 C++ Discussion :

Ajouter un événement (Envent handler)


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 129
    Par défaut Ajouter un événement (Envent handler)
    Bonjour,

    Je dois actuellement développer un prototype d'une future application qu'on veut développer. Une des fonction de notre api est de faire un pont entre une application C++ et plusieurs application .NET et java. Il y a plusieurs années j'ai suivie un cours de C++ mais n'ayant travaillé qu'en Java et en .net ces dernières années mes notions sont un peu loin. J'aurais donc besoin d'un coup de main pour ce que j'ai besoin de faire. Pour référence en ce moment je dois faire le développement en VC 6.0 pour rester compatible avec les fichiers fourni par notre fournisseur.

    J'ai actuellement une DLL COM (fourni par un de nos fournisseurs) développé en C# .net qui nous permet d'avoir un accès au software de notre fournisseur. Dans cette dll il y un objet nommé "Communication" puis une méthode "GetMessage()". J'ai besoin que lorsque la Classe Communication appelle la méthode GetMessage cela trigger une procédure dans mon api C++.

    Notre fournisseur demande que lorsqu'on utilise sa DLL on procède de cette façon. J'ai fait le code pour le côté .NET et tout fonctionne très bien. J'ai simpement ajouter un handle de l'event sur ma procédure mais là je n'arrive pas à trouver comment le faire en C++.

    Donc voici les 2 questions que je me pose.

    1- Comment "chargé" ma DLL en VC 6.0 et que je puisse accéder à l'objet et ces méthodes?. En c++ .net c'est simple car un simple add référence semble faire le travail mais en 6.0 je n'ai pas trouvé.

    2- Comment faire pour attacher l'événement à une procédure de notre code c++.

    Merci !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 129
    Par défaut
    Bon j'ai finalement trouver comment utiliser ma DLL en vc+++ 6.0. J'ai demandé le code source à notre fournisseur et j'ai ajouté un interface à leur classe puis j'ai modifié la compilation pour créer un fichier .TLB.

    J'arrive maintenant à utiliser leur classe et leur méthode mais il me manque seulement à trouver comment faire pour associé une fonction C++ à un evenement dans leur classe.

    Donc si quelqu'un sait comment cela m'aiderait beaucoup!

    Merci !

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 480
    Par défaut
    Citation Envoyé par steelidol Voir le message
    J'arrive maintenant à utiliser leur classe et leur méthode mais il me manque seulement à trouver comment faire pour associé une fonction C++ à un evenement dans leur classe.
    Je vais probablement dire une connerie parce que je ne connais pas COM mais tu ne peux pas te contenter de créer une classe dérivée de Communication et qui redéfinirait GetMessage() pour déclencher la fonction de ton API puis rappeler la méthode originale ?

    S'il s'agit de monitorer les appels passés par le code extérieur à ton projet, en revanche, ce sera un peu plus compliqué.

  4. #4
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut
    Salut
    pourquoi t'utilisera pas directement les Bibliotheque COM
    comme CoInitialize(NULL);
    tu vas créer une instance de ta DLL COM
    Avec CoCreateInstance(......)
    Si tu le sais pas encore la technologie com est basé sur les classe dite classe purement abstraite
    si ça peut t'aider

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 129
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Je vais probablement dire une connerie parce que je ne connais pas COM mais tu ne peux pas te contenter de créer une classe dérivée de Communication et qui redéfinirait GetMessage() pour déclencher la fonction de ton API puis rappeler la méthode originale ?

    S'il s'agit de monitorer les appels passés par le code extérieur à ton projet, en revanche, ce sera un peu plus compliqué.
    Merci je vais voir si c'est possible. Par contre en ce moment dans leur classe ils ont déjà un événement de créé. Via l'interface de la classe je peux voir dans le code C++ l'événement qui a maintenant les option: add_GetMessage() et remove_GetMessage(). Donc j'avais l'impression que je pourrais en C++ simplement "associer" l'événements à une procédure.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 129
    Par défaut
    Citation Envoyé par buggen25 Voir le message
    Salut
    pourquoi t'utilisera pas directement les Bibliotheque COM
    comme CoInitialize(NULL);
    tu vas créer une instance de ta DLL COM
    Avec CoCreateInstance(......)
    Si tu le sais pas encore la technologie com est basé sur les classe dite classe purement abstraite
    si ça peut t'aider
    Merci de te réponse. Je ne m'y connais pas énormément en C++ alors il se peut que j'ai mal compris mais en faisant de la recheche sur internet j'avais cru comprendre qu'il n'était pas possible en C++ (Unmanaged) d'appeller directement une DLL managed. C'est la raison pour laquelle j'ai ajouté une interface à leur classe puis ensuite j'ai compilé leur classe pour générer le fichier maclasse.tlb . Maintenant je fais un "import" au début de mon code et je peux avoir un accès à ma classe (via pointeur).

    Si ta solution est possible alors ça m'intéresse car j'aimerais mieux passer directement pas la DLL.

  7. #7
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut
    salut;
    en effet y ' deux methodes pour acceder, soit par .tlb
    ou directement par le registre;
    tu peux tenter par exemple d'enregistrer ta dll avec regsvr32
    exemple
    regsvr32 taDll.dll pour tester si la dll s'enregistre normalement
    car chaque fois que tu deplace ta DLL vers un autre dossier tu doit l'enregistrer avec regsvr32
    ensuite ( si je m'en souviens tres bien)
    HRESULT hr=CoInitialize(NULL);
    IMonInterface *pInstance;
    CoCreateInstance(/*CLSID*/,NULL,CLSCTX_INPROC_SERVER,/*Riid*/,(LPVOID*)&pInstance);
    pInstance->Methode();
    apres il reste a liberer
    CoUnIntialize();
    j'ai peut etre oublié des trucs,
    mais bon ça va dans ce sens

Discussions similaires

  1. Ajouter un événement...
    Par Spack dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/02/2006, 19h56
  2. [débutant]Ajout d'événement
    Par jsatla dans le forum MFC
    Réponses: 4
    Dernier message: 04/11/2005, 12h19
  3. Ajout d'événement
    Par olivierlsf dans le forum Composants VCL
    Réponses: 1
    Dernier message: 30/09/2005, 17h16
  4. Ajout d'événement
    Par ArkAng3 dans le forum C++Builder
    Réponses: 4
    Dernier message: 04/08/2005, 15h57

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