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 :

[Api Window]Partage d'un objet CreateMapping&MapView


Sujet :

C++

  1. #1
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut [Api Window]Partage d'un objet CreateMapping&MapView
    Bonjour,

    Je souhaiterait réaliser une classe virtuel pure dont il sufirait de dériver et de redéfinir quelques fonctions pour créer ésément une DLL de hook. Seulement, je me demande si je devrait partager les variables membres que l'utilisateur ajoute a sa classe, et dans ce cas, comment les partager? ^^

    Je devrait pouvoir contrôler la création de l'instance de la classe, mais comment être certain de ne créer qu'une instance, et de la détruire quand toute les DLL sont décharger?

    J'avias pour idée d'utiliser CreateFileMapping puis MapViewOfFile affin de libérer un espace mémoire adapter mais comment ne créer qu'une seul instance de cette classe (l'hors du premier appelle au point d'entrée) et détruire (lhors du dernier appelle au point d'entrée)
    Je vois bien qu'il faut compter les appelles mais comment savoir si la vue a déjà été initialiser ou non(dans ce cas, il faut effacer la mémoire car son contenu est indeterminable >.<) et même, une fois l'objet créer (dans une des nombreuses instances de la dll) le placer dans la mémoire partager?
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Je te conseille de séparer objet et données.
    Pour moi, seules des données brutes peuvent être en mémoire partagée. Même les pointeurs internes ne peuvent pas être conservés si tu n'es pas certain de toujours mapper ta zone au même endroit.

    Donc, je te conseille de mettre en mémoire une structure de données brutes, ne pouvant contenir aucun pointeur (mais pouvant contenir des offsets au besoin). Et de faire une classe de gestion de ces données partagées.
    Les instances de la classe seront donc multiples, mais elle pointeront toutes vers les mêmes données.
    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
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Merci c'est une très bonne idée.

    Toute fois il reste un dernier problème : comment savoir si la zone a déjà été utiliser ou bien si il s'agit de la première utilisation?(Car il faut bien initialiser les variables a un moment)

    Et pour ce qui est de la gestion des données, il y aurait moyen d'agrandir petit a petit l'espace mémoire? (histoire de pouvoir stocker des chaînes, ou autre, et de ne pas être obliger de connaitre exactement le nombre de variable a la compilation??? [Par exemple je pourrait avoir les variable stocker de la forme struct<classT>{unsigned int SizeInByte, T Var}; et en rajouter petit a petit.])
    De même, il y a t'il un moyen pour toute les instances de la dll d'utiliser la même console(par exemple la console du programme qui a lancer l'instance de la dll) ?
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Je dirais tu initialise l'objet dès la création du File mapping (ou bien, tu initialises tout le contenu du File Mapping à zéro).

    Et pour savoir si tu viens de créer le File Mapping et non de l'ouvrir, tu regardes ce que renvoie GetLastError() juste après que CreateFileMapping() ait réussi.
    Il peut être nécessaire d'utiliser un mutex en plus du File Mapping, pour les écritures. Ou au moins un Event qui ne serait signalé qu'une fois l'initialisation terminée.

    Pour le reste, j'ai bien peur que tu ne puisses pas.

    Quant à la destruction, ben... Ça va être dûr également, sauf si tu implémentes en plus un comptage dans la zone mémoire (comptage forcément protégé par un mutex ou du Interlocked)
    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.

Discussions similaires

  1. Réponses: 29
    Dernier message: 14/01/2013, 10h40
  2. tutoriel : La programmation de l'API Windows en C++ par Bob
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 19
    Dernier message: 21/06/2008, 14h34
  3. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  4. [API Windows] Polices de caractères disponibles
    Par bebeours dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/11/2003, 08h28
  5. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

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