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

VB.NET Discussion :

Je voudrais charger des DLL dynamiquement.


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Je voudrais charger des DLL dynamiquement.
    Bonjour le forum,
    je migre une application Vb6 en VB.net, application que j'ai moi même développé.
    ces une application livrable par modules par exemple (Edition,Administration...)
    le projet est architecturé autour d'un MdiForm et les autres formulaire en mdiChild.
    pour m'éviter les déboires engendré par la version vb6 qui consiste à gérer les librairies et recompiler le projet, je souhaite que mes dll soit incluse et/ou excluse (était présente mais n'y est plus) dans le projet si présentent dans le répertoire de l'application. elles sont rattachées à un menu du MdiForm.

    il est même envisageable , que pour un client donné, le prix de la licence soit basé sur le nombre de modules achetés (donc livré avec le package).
    j'ai aucune idée de la faisabilité, et du comment si faisable!

    je vous remercie, d’avance, pour toute l'aide que vous voudrez ben m’apporter.
    Robert.
    Dernière modification par Invité ; 11/03/2015 à 12h25.

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Il me parait assez difficile de bien cerner ton problème mais en vue du titre de ton topic je dirais qu'il faut passer par le chargement dynamique de tes librairies (dll) au moyen de System.Reflection.

    Peux-tu être plus concis sur ce que tu as en ce moment et ce que tu souhaites faire ?

    Cdlt.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Sais-tu déjà utiliser des dll vb6 depuis VB.NEt ? (tu ne l'as pas précisé)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    https://msdn.microsoft.com/fr-fr/lib...vs.110%29.aspx

    (appdomain.currentdomain.load)

    si dll existe dans le dossier ajouter les menus et tout fonctionnera normalement


    après ce n'est pas le seul moyen je pense
    l'exe charge les dll au fur et à mesure qu'il en a besoin, donc une dll référencée non présente ne pose aucun problème tant que tu ne passes pas dans une classe qui nécessite cette dll
    aussi on peut donc imaginer que si tu n'as aucun bouton présent qui lance une fenetre d'une autre dll son absence ne posera pas de problème

    tout ceci à un détail près (et dans les 2 cas doit poser problème) c'est lors de la compilation d'une classe que les références sont vérifiées (code) et résolues (recherche dll) (les classes sont compilés à chaque exécution au fur et à mesure de leur utilisation)
    donc il ne faut pas avoir de code d'ouverture de fenetre dans la fenetre de menu
    pour ca il faut passer par la reflection (qui permet de passer d'un string à une référence vers une classe et/ou un membre) ce qui permet d'éviter que le code contienne une référence explicite et que la dll soit recherchée


    ca parrait compliqué dit comme ca mais en 2 lignes de code tu pourras faire ce que tu veux (après quelques tests)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par rv26t Voir le message
    Bonjour,

    Sais-tu déjà utiliser des dll vb6 depuis VB.NEt ? (tu ne l'as pas précisé)
    non j'ai implémenter une dll en VB.net et utise dans un projet

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    non j'ai implémenter une dll en VB.net et utise dans un projet
    Pour utiliser une dll VB.NET dans un projet vb6 mais il me semble que tu veux faire l'inverse (dll vb6 dans VB.net). Il existe un tuto sur DVP pour vb6 - VB.NET, désolé, je ne sais plus ou il est.
    Attention aux types entre VB.NET et vb6, en cherchant sur internet, je pense que l'on doit pouvoir trouver toutes les équivalences.

    Pour ce qui est de la reflection pour charger, utiliser une dll en connaissant son nom et ouvrir une fenêtre, j'avais fait un truc dans le genre. (qu'en VB.NET)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type.GetType(Assembly.GetExecutingAssembly.GetName.Name & "." & New AssemblyName(Assembly.LoadFrom(NomAssembly & "." & NomFormSousMenu).FullName).Name).GetConstructor(Type.EmptyTypes).Invoke(New Object() {}).show()
    Attention en VB.NET 2010 "LoadFrom" était obsolète. Voir ce que propose Pol63

    Sinon pour gérer différent cas d'ouvertures de fenêtre, (simple, avec paramètres, avec classe perso), j'avais fait une classe qui traitait les différentes possibilités (plus directement)
    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
    Public Class InstancieForm
        Public Property fWinForms As Form
     
        Public Sub New(NomForm As String)
            fWinForms = Type.GetType(Reflection.Assembly.GetExecutingAssembly.GetName.Name & "." & NomForm).GetConstructor(Type.EmptyTypes).Invoke(New Object() {}) '.show()
        End Sub
     
        ' construction d'une fenêtre avec une liste de paramètre pour le constructeur
        Public Sub New(NomForm As String, ByRef ls As List(Of String))
            Dim types(0) As Type
            types(0) = GetType(List(Of String))
            fWinForms = Type.GetType(Reflection.Assembly.GetExecutingAssembly.GetName.Name & "." & NomForm).GetConstructor(types).Invoke(New Object() {ls}) '.show()
        End Sub
     
        ' construction d'une fenêtre avec une classe personnalisé 
        ' (on doit pouvoir utiliser "objet" pour passer ce que l'on veut comme classe, mais je préfaire des surcharges afin de typer)
        Public Sub New(NomForm As String, ByRef obj As clsConstructeur)
            Dim types(0) As Type
            types(0) = GetType(clsConstructeur)
            fWinForms = Type.GetType(Reflection.Assembly.GetExecutingAssembly.GetName.Name & "." & NomForm).GetConstructor(types).Invoke(New Object() {obj}) '.show()
        End Sub
    '...
    Les menus étant dans des fichiers xml, me permettant d'avoir des info pour chacun d'eux (nom -> 'NomForm', texte affichage, ...) et construit dynamiquement. (piste : à placer dans les ressources du projet ? et afficher seulement les menus dont les dll existent)
    Mais c'était des tests, j'avais finalement envisagé autrement (CodeDom) parceque la finalité était différente.

    Avec une utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    Dim fd1 As WinForms.InstancieForm = New WinForms.InstancieForm(NomForm)
                    fd1.fWinForms.Show()
    Avec "WinForms" représentant un autre projet (contenant les fenêtres) que le projet principal (contenant les menus)

    Voila quelques pistes, espérant qu'elle pourront te servir.
    Après, il y a peu être plus simple.

    Je vais essayer de retrouver ce tuto vb6 - vb.net sur DVP, il y plus de chance que tu trouves ce que tu veux
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    je migre une application Vb6 en VB.net, application que j'ai moi même développé.
    y en a qui disent qu'un problème doit être bien expliqué, je sais pas si c'est bien le cas ici, ou alors ca vient d'un des lecteurs ^^
    car moi je comprends qu'il a tout redévelopper en .net et qu'il n'y a plus de rapport avec vb6 et un mixage des 2
    sinon ca serait plus une intégration qu'une migration
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    y en a qui disent qu'un problème doit être bien expliqué, je sais pas si c'est bien le cas ici, ou alors ca vient d'un des lecteurs ^^
    car moi je comprends qu'il a tout redévelopper en .net et qu'il n'y a plus de rapport avec vb6 et un mixage des 2
    sinon ca serait plus une intégration qu'une migration
    S'il dit qu'il migre de vb6 vers vbNet (= Ongoing) pour moi ça ne veut absolument pas dire qu'il a tout redéveloppé en .Net (= Completed) !
    Ceci dit le lecteur en question a déjà orienté OP vers System.Reflection et le lien associé..... et à mon sens la solution se situe bien ici mais s'il attends davantage il faudra nous donner un peu plus de biscuit..... même si je pense que rv26t couvre une bonne partie de la réponse finalement

    A+

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Eh bien, il a dit "je migre" ce qui m'a fait penser que cela était en cour.
    Et à ma question de savoir interfacer vb6 et vb.net, il n'a pas dit que ce n'était pas le but, ni s'il souhaitait le faire. Du coup je ne sais pas trop.
    J'ai peu être mal compris.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonsoir et merci pour toutes ces réponses,oui je migre tous en vb.net.
    Oui la chose est en cours.

    C'est une gros d'application qui dispose de plusieurs niveaux d'utilisations.

    Dont une partie automate.

    Ma préoccupation première est de livrer par modules autonomes (dll), de façon à ne pas perturber utilisateur.

    Actuellement j'ai migré la partie automate.je compte entreprendre la partie création/édition de projet; La partie administrateur n'a pas d'urgence car l'application est déjà configuré (avec la version VB6) en base de données Sql Server.
    Les utilisateurs utilise ancienne version actuellement et le traitement ce fait par la version de l' automate VB.net.

    L'application est également modulable par exempte la partie édition ce fait côté client et la partie automate côté serveur.

    Mais il est toujours possible d'effectuer le tout côté client, dans le premier cas le client fait une demande de job au serveur, dans le deuxième cas ces le client qui exécute le job; c'est comme ça que ça fonctionne actuellement!

    Merci Pol63 pour ce lien et t'es explicitions qui vont dans le sens de ce au je cherche.

    Édite:
    C'est une application métier à usage interne mais certains client nous demande de traitement spécifique et je code des modules externe que l'administrateur intègre à l'application par un gestionnaire de module externe.

    Dans un avenir plus lointain il est envisageable quelle soit commercialisé.

    comme l'a dit Pol63 il n'y a plus rien en VB6, et pour être plus précis la librairie VB6 est décoché des références.
    Dernière modification par Invité ; 12/03/2015 à 13h21.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    je pense pouvoir considérer ma question comme résolue!


    je savais bien que ce genre de manip était possible, vous m'avez fait gagner un temps de recherche considérable. Il me semblais et j'avais raison qu'il serait pus rapide de d’obtenir mes réponse, en posant la question sur question sur ce forum.

    Bien évidement je n’hésiterai pas à revenir si si je rencontrais des problème de mise en œuvres.

    Encore merci.

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

Discussions similaires

  1. [WPF] Charger des style dynamiquement
    Par NeoKript dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 28/11/2010, 15h52
  2. Charger des schémas dynamiquement dans un job Talend
    Par coulio dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 05/04/2010, 00h04
  3. Problème pour charger des font dynamiquement et les utiliser (marche à moitié)
    Par rigolman dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 31/03/2009, 08h29
  4. Réponses: 2
    Dernier message: 13/03/2007, 17h07
  5. [Avancé][Optimisation] Charger des librairies dynamiquement
    Par Wookai dans le forum Général Java
    Réponses: 12
    Dernier message: 12/08/2005, 16h34

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