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 :

Prévenir une application à partir d'une DLL


Sujet :

C++

Vue hybride

Tuizi Prévenir une application à... 31/10/2007, 12h45
Médinoc Pour ça, je conseillerais un... 31/10/2007, 14h38
ram-0000 Un événement nommé créé par... 31/10/2007, 14h38
Tuizi En faite le programme qui... 31/10/2007, 16h23
ram-0000 Alors je pense que le... 31/10/2007, 16h31
Tuizi Il n'y a pas un moyen simple... 31/10/2007, 17h14
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Par défaut Prévenir une application à partir d'une DLL
    Bonjour,

    Voila j'ai une DLL qui va écrire des informations dans un de la mémoire partagé, et je voudrais quel informe mon application d'aller lire celle-ci.
    En faite je chercher à créer une sorte d'évenement qu'une DLL envoie à mon programme.
    ATTENTION: ma DLL et mon programme ne sont pas dans le meme processus.

    J'ai regardé du coté des mutex, semaphore, mais j'arrive pas à trouver le mécanisme le plus optimisé pour cela.

    Je fais donc appel à votre expérience

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pour ça, je conseillerais un Manual-Reset Event, sans doute nommé.
    Plus un mutex (ou plus compliqué si tu veux supporter plus d'un lecteur simultané) pour éviter que la DLL écrive dans la mémoire au moment où l'autre processus lit.
    Je pense que l'événement devrait être resetté par la DLL dès qu'elle récupère le mutex pour écrire, et signalé à la fin (avant ou après la libération du mutex par la DLL).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Un événement nommé créé par ta DLL, positionné par ta DLL,
    testé par ton programme, effacé par ton programme

    Voir la fonction CreateEvent() et ses soeurs (http://msdn2.microsoft.com/en-us/library/ms682396.aspx)

    En fait, cela peut aussi être un fichier créé par ta DLL et testé/effacé par ton programme

    Quand tu dis "Voila j'ai une DLL qui va écrire des informations dans un de la mémoire partagé, et je voudrais quel informe mon application d'aller lire celle-ci.", en fait tu veux dire "J'ai un programme qui utilise une DLL qui va écrire ..." ?

    Est ce que ce programme est actif en permanence car si ce programme s'arrête, son arrêt risque d'effacer les objets qu'il aura créé (Event, mutex, semaphore, ...) et il faut donc se tourner vers un moyen persistant

    J'espère que je me fais comprendre
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Par défaut
    En faite le programme qui utilise ma DLL sera forcément couper avant mon programme.

    Je vais regarder du coté du CreateEvent() car en faite je voudrais que mon programme reçoivent un evenement qui lui dit qu'il peut aller lire dans la mémoire partagé, au lieu de bouclé jusqu'a détecter un changement dans la mémoire.

    Médinoc> je ne connais Manual-Reset Event je vais regarder cela aussi.

    Merci pour vos réponses, je vais tester tous ça et je vous tiens au courant si j'ai des questions ou autres

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Alors je pense que le CreateEvent n'est pas bon (pour info, l'idée "Manual-Reset Event" de Médinoc, c'est la même chose que mon idée "CreateEvent", c'est juste la manière de le dire qui n'est pas identique)

    C'est pas bon, porquoi ?
    Car ton 1er programme va créer un Event nommé (par CreateEvent), va le signaler et ensuite va s'arrêter.
    Comme le programme s'arrête, l'Event nommé n'a plus de propriétaire, donc le système va le détruire automatiquement (et tu ne peux rien faire contre)

    Toute solution à base d'objet Microsoft nommé (Event, MailSlot, Pipe, Shared memory, ...) aura le même comportement. Je pense que tu vas être obligé de te rabattre sur la solution à base de fichier

    Le 1er programme crée un fichier quelconque et s'arrête. Le second programme teste la présence de ce fichier, réagit en conséquence et déventuellementy détruit le fichier. C'est le seul moyen que je voie pour créer une notion de persistance.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Par défaut
    Il n'y a pas un moyen simple pour faire:

    Mon programme (A) lance un programme (B) qui va charger ma DLL
    Une fonction de ma DLL va être appelé, j'envois donc un événement à mon programme A.
    Mon programme B qui execute ma DLL , s'arrete, la DLL est déchargé. Pas de problème mon programme A ne va pu recevoir d'évênement et c'est tant mieux.

    En aucun cas le programme A va s'arreter avant le programme B

    Voila en gros le fonctionnement.
    Donc le principe de l'évênement me plait bien moi.

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Tuizi Voir le message
    Mon programme (A) lance un programme (B) qui va charger ma DLL
    Une fonction de ma DLL va être appelé, j'envois donc un événement à mon programme A.
    Mon programme B qui execute ma DLL , s'arrete, la DLL est déchargé. Pas de problème mon programme A ne va pu recevoir d'évênement et c'est tant mieux.

    En aucun cas le programme A va s'arreter avant le programme B
    Alors, si c'est ce fonctionnement, cela va marcher à condition que:
    1/ L'événement nommé doit être créé par le programme (A)
    2/ L'événement nommé est eventuellement positionné par la DLL appelée par le programme (B) lui même lancé par le programme (A)
    3/ L'événement est testé ensuite par le programme (A)
    4/ l'événement est effacé (explicitement ou implicitement) à l'arrêt du programme (A)

    Dans tous les cas, il faut que l'événement soit créé par (A). Sinon, si il est créé par la DLL appellée par (B), il sera effacé du système automatiquement lors de l'arrêt de (B)
    Ce mécanisme impose à (A) et à la DLL de connaitre le même nom de l'objet "Event nommé".
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/12/2012, 09h30
  2. Réponses: 3
    Dernier message: 15/09/2011, 14h38
  3. Réponses: 5
    Dernier message: 22/05/2008, 14h42
  4. Lancer une application à partir d'une application précise.
    Par Faith's Fall dans le forum C++Builder
    Réponses: 2
    Dernier message: 16/01/2007, 18h08
  5. Réponses: 2
    Dernier message: 04/10/2005, 11h12

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