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 :

Deserialisation dans une DLL


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Par défaut Deserialisation dans une DLL
    Bonjour à tous

    Alors voila,
    Suite à une implémentation de plugin et compagnie (voir mes autres posts ^^)

    Je me retrouve à devoir sérialiser des objets contenus dans une DLL.
    Jusque là, pas de soucis ...

    Par contre, lors de la déserialisation,
    J'ai une exception comme quoi le type de l'objet n'existe pas ...


    Je pose le contexte ^^
    J'ai des modules avec des configurations.

    J'ai besoin de sauvegarder le type de chaque module mais pas son instance.
    Et j'ai par contre besoin de sauvegarder sa configuration actuelle
    (donc une instance)
    Les deux objets sont décris dans une DLL
    Et l'objet de configuration n'est connu que par le module
    (mon programme ne connait que l'interface qu'il implémente)

    Donc quand je recrée l'objet lors de la déserialisation,
    Je souhaite lui redonner sa configuration.
    Mais je peux pas vu que le type réel n'est connu que par la DLL ...


    J'ai contourné le problème de la façon la plus moche qui soit,
    C'est à dire que mon interface est devenue une classe abstraite
    Contenant un dictionnaire d'attributs
    Et c'est la seule chose que je sauvegarde

    (Oui c'est très très moche ^^')

    voilà ce que ça donne :

    Dans le programme
    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
     
    public abstract class Configuration
    {
      public IDictionary<string, object> Attributes { get; set; }
     
      #region constructors
      public Configuration()
      {
        Attributes = new Dictionary<string, object>();
      }
      #endregion
     
      #region accessors
      public T getAttr<T>(string name)
      {
        return (T)Attributes[name];
      }
     
      public void setAttr<T>(string name, T value)
      {
        Attributes[name] = value;
      }
      #endregion
     
      public abstract void show();
    }
    Dans une DLL
    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
     
    class MyConfig : Configuration
    {
      public MyConfig()
      {
        setAttr<string>("myattr", "coucou");
      }
     
      #region Configuration
      public override void show()
      {
        // ...
      }
      #endregion
     
      public void plop()
      {
        Console.ReadLine(getAttr<string>("myattr"));
      }
    }
    Quelqu'un voit le soucis et comment y remédier ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Par défaut
    salut,

    J'ai lu en diagonal, mais qu'utilise tu pour ta sérialisation ? XML, binaire ? tu le fait à la main, ou tu utilise ce qui existe dans .net ?

  3. #3
    Membre expérimenté Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Par défaut
    Je le fait en binaire avec les mécanismes de C# ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // Serialize.
    MyObj o1 = new MyObj();
    BinaryFormatter binaryFmt = new BinaryFormatter();
    FileStream fs = new FileStream("MyObj.xml", FileMode.OpenOrCreate);
    binaryFmt.Serialize(fs, o1);
    fs.Close();
     
    // Deserialize.
    fs = new FileStream("MyObj.xml", FileMode.Open);
    MyObj o2 = (MyObj)binaryFmt.Deserialize(fs);
    fs.Close();
    Dans MyObj,
    J'instancie des objets provenant de dll extérieurs chargées dynamiquement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ObjA obj = ((ObjA)AppDomain.CurrentDomain.
                      CreateInstanceFromAndUnwrap(
                      "plugins\\" + pluginname, "Components.ObjA"));
    En fait je comprend le problème,
    Mais je ne comprend pas pourquoi le framework n'y arrive pas
    Je veux dire,
    Soit il interdit de sérialiser un objet provenant d'une dll chargée dynamiquement ...
    Soit il arrive à reconstruire l'objet ...

    Donc je sais pas,
    Peut être existe t'il un autre moyen de charger une dll

    Ah oui aussi ...
    Je suis dans le même programme,
    Donc la dll est toujours chargée ^^

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Par défaut
    Là, je ne sais pas, désolé.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/01/2007, 16h23
  2. [VStudio 6] pb avec fonctions dans une DLL
    Par MogDeChNord dans le forum MFC
    Réponses: 8
    Dernier message: 08/01/2004, 08h57
  3. [BP7] Problème chargement de ressource dans une DLL
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 26/07/2003, 21h36
  4. PB avec "self" dans une dll
    Par DiJiRiDouS dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 09h32
  5. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15

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