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 :

Problème avec AppDomain


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Veler
    Profil pro
    Lycéen
    Inscrit en
    Mars 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2007
    Messages : 195
    Par défaut Problème avec AppDomain
    Salut à tous,

    Alors voilà, j'ai créer un concepteur de fenêtre, comme celui de visual studio. Rien à dire, tout fonctionne très bien.
    J'ai créer une fonction qui détecte tous les contrôle d'une dll, et les affiches dans la ToolBox que j'ai créé... J'ajoute les contrôle, j'enregistre ce que j'ai fait avec ce concepteur de vue...etc, mais petit problème lors du chargement du concepteur de vue avec des contrôle provenant de cette fameuse dll :
    après une petite recherche, j'ai compris que le problème est qu'il n'arrive pas à charger les contrôle que je lui ai donné tout simplement car il n'a pas cette fameuse dll. Pour cela, il faudrait qu'elle soit inscrite au concepteur de vue, euuuh, comme quand on ajoute une référence dans VS, mais c'est pas possible comme ça, donc mes recherches m'ont amené au AppDomain, qui pourrait arranger mon problème.

    Seulement voilà, j'y comprend rien, quelqu'un peu-il m'expliquer comment charger correctement une dll avec appdomain (parce que jusqu'ici, c'est pas ça, lol), et si vous avez encore plus de précision, c'est avec plaisir.

    Merci
    @+

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Un Assembly.Load sur la dll requise ne suffit pas ?

  3. #3
    Membre confirmé Avatar de Veler
    Profil pro
    Lycéen
    Inscrit en
    Mars 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2007
    Messages : 195
    Par défaut
    Malheureusement non, j'avais commencé par ça mais apparemment ça ne fonctionne pas.

  4. #4
    Membre confirmé Avatar de Veler
    Profil pro
    Lycéen
    Inscrit en
    Mars 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2007
    Messages : 195
    Par défaut
    Et pourtant, si je regarde les assembly chargés avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
     
    foreach (Assembly assembly in assemblies)
    {
        MessageBox.Show("Loaded:  " + assembly.ManifestModule.Name);
    }
    et bien je retrouve bien celle que je voulais chargé, alors j'y comprend vraiment rien, lol.
    Peu être que le problème vient d'ailleurs mais ou?

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Comment essaies-tu d'acceder à ta dll? peut-être que le problème vient de là...

  6. #6
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Au hasard essaye ça :
    Code c# : 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
     
    public static class AssemblyLocator
            {
                static Dictionary<string, Assembly> assemblies;
                static Dictionary<string, Assembly> softassemblies;
     
                public static void Init()
                {
                    assemblies = new Dictionary<string, Assembly>();
                    softassemblies = new Dictionary<string, Assembly>();
     
                    AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad);
                    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
     
                }
     
                static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
                {
                    Assembly assembly = null;
                    assemblies.TryGetValue(args.Name, out assembly);
                    if (assembly == null)
                    {
                        try
                        {
                            AssemblyName name = new AssemblyName(args.Name);
                            softassemblies.TryGetValue(name.Name.ToLower(), out assembly);
                        }
                        catch { }
                    }
     
                    return assembly;
                }
     
                static void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
                {
                    Assembly assembly = args.LoadedAssembly;
     
                    assemblies[assembly.FullName] = assembly;
                    softassemblies[assembly.GetName().Name.ToLower()] = assembly;
                }
            }
    Il te faut après appeler Init() (dans le même domaine que les assemblies chargées).

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

Discussions similaires

  1. Problème avec les AppDomain
    Par Safirion dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 14/06/2012, 10h41
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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