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

Visual C++ Discussion :

Bibliothèque partagée ?


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 21
    Par défaut Bibliothèque partagée ?
    Bonjour à tous,

    Je poste ici ma question mais il s'agit d'une question de prog c++ plus globale.

    "Partagée" veut bien dire que la même bibliothèque peut être utilisée par plusieurs exécutables.

    D'après ce qui est dit dans le topic
    http://www.developpez.net/forums/d88...ynamiques-dll/ :

    La lib n'existe qu'une seule fois en mémoire (la librairie est partagée entre tous les processus qui l'utilisent)
    Mais chaque processus qui l'utilise l'instancie dans sa propre zone mémoire ?
    Ce que je vais demander est pt une grosse bétise mais je veux en avoir le coeur net.

    Est il possible de partager la même donnée contenue dans la dll par plusieurs exécutables qui l'utilisent ? ce qui équivaut à dire la même instance de la dll auquel cas le terme "partagé" prendrait tout son sens ?

  2. #2
    Membre très actif
    Profil pro
    Développeur indépendant
    Inscrit en
    Août 2004
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur indépendant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2004
    Messages : 374
    Par défaut en mode static oui
    si tu mets static devant ta definition de variable, celle si ne sera instanciée qu'une fois, et donc accessible par toutes les instances du code qui l'utilisent, et donc, partagée.
    c'est utile, mais ca pose aprés des problémes d'accés en ecriture/modification, et il faut gérer les sections critiques pour éviter les accés concurrents inopportuns ou des events.


    va voir ici, ca peut aider.
    http://bob.developpez.com/tutapiwin/article_54.php

  3. #3
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 21
    Par défaut
    Merci pour ta réponse.

    Donc tu veux dire que si j'ai ma dll :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class DLL_EXPORT maDll {
     static int maVariable = 0;
    }
    et que j'ai 2 appli qui instancient maDll :
    app1.exe qui met maVariable à 1.

    maVariable sera à 1 dans app2.exe ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    NON.

    Dans une dll, il y a plusieurs sections, comme dans n'importe quel exécutable.

    La section de code, la section des données globales initialisées, la section des données globales non initialisées, etc ...

    Chaque section dispose de "flags" indiquant au chargeur des dll de l'OS quelles sections peuvent être partagées entre les différents programmes.
    Ces flags sont renseignés par l'éditeur de lien au moment du link.
    En générale, la section du code est partagée et les sections de données ne sont pas partagées.

    Vous pouvez changer la section ou sera mis votre code ou vos données via #pragma data_seg (http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx) , et vous pouvez changé le caractère partagées d'une section via l'option de link /SECTIOn (http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx)

    Exemple :
    http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx

  5. #5
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 21
    Par défaut
    YES,

    Merci bcp de m'aiguilller Bacelar,

    Les data seg sont d'après ce que j'ai compris utiles pour des données basiques,
    Mais dans mon cas c'est un peu plus compliqué, je dois pouvoir partagée une hashmap <key, ptrSurMonObjet>
    et l'autre solution qui a l'air plus adaptée consiste à utiliser les Memory Mapped Files : http://msdn.microsoft.com/en-us/library/ms810613.aspx
    Et là ya de la lecture donc je m'y mets...

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    Pour partager des données entre programme, il est clair que les fichiers mappés sont une approche bien plus directe mais là, il n'y aura pas de code dans une dll pour faire l'arbitrage entre les accès concurrents entre ces programmes.

    Les fichiers mappés est une solution qui peut apparaître simple au premier abord mais le niveau d'abstraction et donc de service est extrêmement bas, pas de synchronisation des accès, pas de correspondances des adresse portable entre les applicatifs (donc, le parcours de pointeur dans une map, ça va être corsé), allocation d'objet dans cette zone à faire sans la C-Runtime etc...

    Quel est votre problème initial, car là, vous êtes en train de réinventer la roue.

  7. #7
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 21
    Par défaut
    Ok je te remercie pour toutes ces infos bacelar,

    Je vais tenter d'investiguer la dessus et améliorer mon architecture.

Discussions similaires

  1. Génération d'un ear avec bibliothèque partagée
    Par jaljal dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 08/12/2009, 16h15
  2. Bibliothèque partagée utilisant une classe
    Par prgasp77 dans le forum C++
    Réponses: 14
    Dernier message: 14/09/2009, 16h45
  3. Bibliothèques partagées
    Par coren dans le forum Ada
    Réponses: 0
    Dernier message: 18/04/2008, 15h48
  4. Réponses: 3
    Dernier message: 10/01/2007, 16h03
  5. [gcc] créer une bibliothèque partagée
    Par jula dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 17/11/2005, 11h00

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