FMatrix07
Messages postés233Date d'inscriptionmercredi 26 février 2003StatutMembreDernière intervention21 février 2009
-
26 juin 2008 à 00:16
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDerniè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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
FMatrix07
Messages postés233Date d'inscriptionmercredi 26 février 2003StatutMembreDernière intervention21 février 20092 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
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 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à
Vous n’avez pas trouvé la réponse que vous recherchez ?