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

MFC Discussion :

Demande de conseil : communication entre applications


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 25
    Points : 11
    Points
    11
    Par défaut Demande de conseil : communication entre applications
    Bonjour tout le monde,
    ma question porte sur du développement Visual C++ et plus généralement sur les applications Windows.

    Je dispose d'une application sous forme d'ActiveX MFC intégré à une page web se connectant à un serveur du réseau.
    Le projet sur lequel je travaille a beaucoup plu et voit de nouvelles débouchées. L'objectif serait de faire un outil permettant à partir de n'importe quelle application (ou les plus classiques en tout cas) faire click droit sur une sélection et choisir une action personnalisée dans le menu contextuel. De même avec les contacts Outlook.
    • J'ai d'abord pensé réutiliser l'ActiveX existant en le chargeant par différents plugins (plugin Outlook, plugin Firefox, plugin IE...) en fonction des applications lancées. Un problème majeur se pose : je ne peux avoir qu'une seule connexion à mon serveur et chaque ActiveX (ou dll à la rigueur) est une nouvelle instance, elles essaieront donc toutes de se connecter.
    • J'ai ensuite pensé faire un service Windows contenant mon ActiveX et chaque plugin se connectera à celui-ci et lui demandera de réaliser les actions. Le soucis avec cette solution est qu'il n'y a pas (ou difficilement d'après ce que j'ai pu lire) d'interface graphique, or j'en ai besoin pour que l'utilisateur s'authentifie au SI.
    • Enfin je me suis dit que je pourrais faire une application accessible par les plugins une fois lancée. Mais je n'ai aucune idée des possibilités entre deux applications de communiquer. J'ai lu qu'il existe une mémoire partagée qui pourrait être utilisée dans mon cas pour déposer des demandes que l'application principale récupérerait et exécuterait, mais techniquement je ne connais pas du tout ce système. J'ai aussi pensé qu'il devait exister l'équivalent des méthodes externes disponibles dans les ActiveX.
    Autre soucis technique, les menus contextuels dans des applications telles que Microsoft Office sont-ils modifiables facilement ? Ne serait-il pas plus judicieux de rajouter seulement une barre d'outils telle que celles qu'on installe (genre google bar dans ie, etc...) ?

    Si vous avez des informations ou idées à me donner je suis ouvert à de nombreux cas de figure le projet n'étant pas encore spécifié. Merci d'avance.

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    il existe effectivement une mémoire partagée, mais dans ton cas, il est plus judicieux d'utiliser les pipes nommées voir CreateNamedPipe sur MSDN.

    Pour éviter de créer plusieurs instances à chaque fois, tu peux aussi utiliser un singleton avec une méthode d'instanciation en statique

    Sinon, globalement, je ne pense pas que ca soit facile de modifier des menus contextuels d'une appli, mais cela doit dépendre des applis

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par nico-pyright(c)
    il existe effectivement une mémoire partagée, mais dans ton cas, il est plus judicieux d'utiliser les pipes nommées voir CreateNamedPipe sur MSDN.
    Merci de ton aide, je regarderai de ce côté pour mon évaluation de charges.

    Citation Envoyé par nico-pyright(c)
    Pour éviter de créer plusieurs instances à chaque fois, tu peux aussi utiliser un singleton avec une méthode d'instanciation en statique
    Un colègue m'en a parlé mais m'a dit que c'était relativement compliqué à réaliser, c'est pour ça que j'ai posé la question de mémoire partagée.

    Citation Envoyé par nico-pyright(c)
    Sinon, globalement, je ne pense pas que ca soit facile de modifier des menus contextuels d'une appli, mais cela doit dépendre des applis
    Je ne suis pas un développeur C++ confirmé même si j'en ai déjà fait mais il me semble que des API existent pour la suite Microsoft Office (c'est le gros de la demande). Reste à savoir si elles sont bien faites et bien documentées...


    En tout cas merci pour ton avis, j'avais besoin d'un point de vue extérieur.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut ,
    pour le pipe nommé voir cet exemple:
    http://www.developpez.net/forums/sho...449#post331449

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Le singleton c'est pas si dur, et puis je suis sur que tu trouveras beaucoup d'exemples sur le net ; si je me rappelle bien, farscape avait meme proposé une implémentation sur ce forum, tu devrais pouvoir la retrouver avec la recherche

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    un singleton est une variable globale deguisée qui doit gérer l'accés concurentiel a l'objet surtout en multi-thread.
    la classe doit permettre qu'une seule instance de l'objet ,et sa creation
    et controllée par un fonction d'accés .

    Exemple:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    namespace Singleton {
     
    class MyClass
    {
        private: static MyClass*  m_pUniqueInstance;
        private: static CMutex      m_LockInstance; // warning -> :#include <afxmt.h>
     
        private: MyClass(const MyClass&); // Disable copy constructor
        private: void operator=(const MyClass&); // Disable assignment operator
     
        private: MyClass()
        {
            // Initialisations
        }
        private: ~MyClass()
        { 
            m_pUniqueInstance = 0;
        }
        public: static MyClass &GetInstance()
        {
            if (m_pUniqueInstance == 0)
            {            
                m_LockInstance.Lock();
                if (m_pUniqueInstance == 0)
                    m_pUniqueInstance = new MyClass();
                m_LockInstance.Unlock();
            }        
            return *m_pUniqueInstance;
        }
        public: static void FreeInstance()
        {
            m_LockInstance.Lock();
            delete m_pUniqueInstance;
            m_LockInstance.Unlock();
        }
        // users functions.    
        void UserFunction()
       {
            ASSERT(m_pUniqueInstance);
       }
     
    };
     
    } // namespace Singleton
    // init static data
    CMutex     Singleton::MyClass::m_LockInstance;
    Singleton::MyClass*  Singleton::MyClass::m_pUniqueInstance=NULL;
     
    // utilisation.
    Singleton::MyClass &theClass=Singleton::MyClass::GetInstance();
    theClass.UserFunction();
    // ou
    Singleton::MyClass::GetInstance().UserFunction();
    // libération
    Singleton::MyClass::FreeInstance();
    Suivant le contexte d'utilisation on peut se passer du mutex.

    l'Exemple est adapté de ma lecture du book design patterns tete la premiere
    (en java).
    dont j'ai fais une critique pas encore parue

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Utiliser des singletons me parait une méthode adaptée à mon besoin actuel mais un peu risquée car le code existant est validé et j'aimerais éviter d'y toucher trop. Je regarderai l'ampleur des modifications à faire si cette option est retenue mais elle me tente bien.
    L'avantage d'utiliser les pipe est que le code existant reste tel quel, ce n'est que de l'ajout d'un protocole de communication. C'est un avantage certain vu le nombre de ligne de code de l'ActiveX et vu que des méthodes d'accès externes aux fonctionnalités existent déjà.

    Je vais faire des essais des deux méthodes sur des petits programmes si j'ai le temps, je me ferai une idée plus concrète de la question.


    En tout cas merci de votre aide, généralement je trouve ce qu'il me faut dans les posts existants (cf. mon nombre de messages très réduits ) mais cette fois je planchais un peu...
    Je coche "résolu", les réponses me conviennent parfaitement

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    post singleton modifié.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Communication entre application
    Par toure32 dans le forum Delphi
    Réponses: 5
    Dernier message: 21/06/2007, 13h56
  2. Communication entre applications
    Par StormimOn dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 04/06/2007, 14h27
  3. [C#] Communication entre applications ?
    Par fmichael dans le forum C#
    Réponses: 10
    Dernier message: 02/03/2007, 08h30
  4. communication entre application.
    Par clucky dans le forum Langage
    Réponses: 1
    Dernier message: 10/10/2006, 10h10
  5. [COM | VB] communication entre application hétérogène
    Par zlavock dans le forum Général Java
    Réponses: 8
    Dernier message: 21/11/2004, 10h51

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