Ajouter fonction à .exe

Résolu
FMatrix07 Messages postés 233 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 21 février 2009 - 26 juin 2008 à 00:16
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 - 26 juin 2008 à 05:22
Bonsoir,

J'ai développer un soft qui fonctionne maintenant correctement.
Mais il me vient une question, si je souhaite ajouter une fonction à mon soft sans avoir à recompiler ma source est ce possible ?

Je m'explique:
ex: mon soft aujourd'hui fait ouverture d'une form avec une liste box
demain je souhaite ajouter une deuxieme fontion au soft, ouverture d'une deuxieme form
mais je ne veux pas recompiler comment faire?

Je pensais à certain logiciel qui font un peu ça avec des plugings à telecharger mais je ne vois pas comment faire.

Si quelqu'un avait une idée, car mes recherches meme ici ne donne rien.

@+:

SCCréat

Mail: [mailto:Stephan.COCHET@hotmail.fr Stéphan.COCHET]

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
26 juin 2008 à 00:55
Salut
Oui, les plugins, pourquoi pas MAIS il faut le prévoir dans l'EXE d'origine.
Mais les plugins en VB6, j'ai jamais tenté, mais c'est surement coton (Voir les quelques codes à ce sujet avec la recherche)
Dans tous les cas, il te faudra recompiler et redistribuer

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 juin 2008 à 01:28
salut,

umm... pas besoin de recompiler, suffira juste de faire "propre" la première fois.
ex : toujours la même classe interface dans l'activex (plugin)  pour avoir la même architecture d'appel.

ensuite à chaque lancement l'exe liste toutes les dll du répertoire voulu, les enregistre, et comme les appels "de départ" sont les mêmes, roule ma poule

puis selon chaque plugin ils savent ensuite comment (se / ) quoi gérer.
par contre mieux vaut éviter de penser à la communication interplugins. le 3 qui fonctionne avec le 2.... qui peut ne pas exister

voir dans ma source SkinB2 (par exemple) pour le fonctionnement de dll enregistrées par l'exe. en l'occurrence je m'en sers comme simples ressources (pas de méthode) mais il y a les propriétés identiques pour chacune, avec le même nom de class etc...

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
FMatrix07 Messages postés 233 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 21 février 2009 2
26 juin 2008 à 04:14
Bonjour,
 
Merci de vos réponses, je me doutais bien que c'était avec des plugings mais maintenant il faut que je touve une source expliquant completement comment bien les utiliser.

Ce qui ne va pas etre simple !

Si vous en avez déjà vu ou utilisé n'hesitez pas à me le faire savoir

@+:

SCCréat

Mail: [mailto:Stephan.COCHET@hotmail.fr Stéphan.COCHET]
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
26 juin 2008 à 05:20
Salut FMatrix,
Je suis justement en train de développer une application avec laquelle je me suis initié à la gestion des plugins. En fait, j'avais commencé par un style "tout-plugin": mon exe n'était rien d'autre qu'un "splash-screen" et un lanceur de plugins. L'interface principale, les données et tout le reste était des composants chargé dynamiquement.
Mais comme le dit PCPT: "par contre mieux vaut éviter de penser à la communication interplugins.". En effet, c'était mon cas. Chaque composant communiquait avec les autres, et c'est vite devenu un gros bordel. J'ai donc très vite abandonné l'idée de faire une appli "tout-plugin" et j'ai créer une appli normale, ce qui à grandement réduit le code (Le support des plugins est encore présent). Mais tout dépend des cas aussi
Voici comment ça fonctionne dans mon appli (en simplifié):

Dans l'application, il y a:

1° L'architecture des plugins. Il s'agit de déclarer les propriétés et les méthodes du plugin.
Le plus simple pour la suite, c'est de créer une interface pour faire ça. L'inconvénient, c'est que tu ne pourra pas y ajouter de nouveaux membres par la suite.

Public Interface IPlugin
    ReadOnly Property Name As String   ' Nom du plugin
    Sub Load(TE As AppDatas)              ' Chargement des donnnée
    Sub Install()                                       ' Installation dans l'interface
End Interface

Tous les plugins devront donc implémenter cette interface pour pouvoir être chargé par le programme.

2° Le partage des données entre l'appli et les plugins. Ca peut être tout et n'importe quoi, dans mon cas il s'agit d'une classe comportant de nombreuses méthode et propriété pour pouvoir accéder aux interfaces graphiques, au données et à tous les autres éléments de mon application. Dans le cas suivant, les plugins pouront accéder à une ListView de l'interface principale:

Public Class AppDatas


    Friend Sub New(MainForm as frmMain)  
       Me.MainForm = MainForm
    End Sub
    Private MainForm as frmMain

    Public ReadOnly Property ListView As ListView
       Return MainForm.ListView1
    End Property

End Class

3° Le chargement des plugins:

       Dim DLLs As String() = IO.Directory.GetFiles([Dossier contenant les DLL], "*.dll")

        ' Parcourir chaque DLL
        For Each File As String In DLLs
            Try
                ' Charger l'assembly
                Dim dll As Reflection.Assembly = Reflection.Assembly.LoadFrom(File)
                Dim Types As Type() = dll.GetTypes

                ' Parcourir chaque type contenu dans la DLL à la recherche d'une
                ' classe implémentant IPlugin
                For Each tp As Type In Types
                    If tp.IsClass Then
                        If tp.GetInterface("IPlugin", True) IsNot Nothing Then
                            ' Une classe implémentant IPlugin à été trouvé, la charger
                            Try
                                Dim Plugin As IPlugin = dll.CreateInstance(tp.ToString)
                                Plugin.Load(Me.AppDatas)
                                Console.WriteLine(Plugin.Name & " à été chargé")
                            Catch ex As Exception
                                ' Erreur lors du chargement du plugin
                                MsgBox("Impossible de charger le composant '" & tp.Name & "' du fichier '" & File & "'" & vbCrLf & vbCrLf & ex.Message, MsgBoxStyle.OkOnly Or MsgBoxStyle.Critical, "Erreur")
                            End Try
                        End If
                    End If
                Next
            Catch ex As Exception
                ' Erreur lors du chargement de l'assembly
                MsgBox("Le fichier '" & File & "' n'est pas un assembly valide", MsgBoxStyle.OkOnly Or MsgBoxStyle.Critical, "Erreur")
            End Try
        Next

Et voilà
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
26 juin 2008 à 05:22
Harf.. on est en VB6

I'm sorry, It's because it's very very late 
0
Rejoignez-nous