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

Windows Forms Discussion :

Thread et dll externe


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut Thread et dll externe
    Bonjour, voilà mon problème.

    Je veux rajouter un système de plug-ins à mon programme, j'arrive à charger les dll, a lancer des methodes, mais je n'arrive pas à faire un nouveau Thread et lancer une méthode de la dll.


    Voila mon Erreur sur la ligne " obj.Main()":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La référence d'objet n'est pas définie à une instance d'un objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim ThreadF As Thread = New Thread(New ThreadStart(AddressOf test))
            ThreadF.Start()
        End Sub
     
     
        Private Shared Sub test()
            Dim obj As Object
            obj = AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(Application.StartupPath & "\Fights\Guerrier.dll", "Guerrier.Script.Fights")
            obj.Main()
        End Sub
    Merci de me dire comment je peux faire pour lancer en parallèle de mon programme principal les méthodes des dll, parque sa fait 4 heures que je reste bloqué dessus.

    Merci d'avance

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ca sent les paramètres de compilation qui laissent tout faire (pas terrible dejà)
    et d'ailleurs ca se voit, tu écris des choses sans savoir si c'est possible !

    pourquoi y aurait une méthode main sur une dll ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Parque je vais dire à ceux qui développes les plug-ins que la méthode qui sera chargée sera la méthode main, je c'est pas comment faire autrement.

    Après si quelqu'un a une autre solution pour intégrer des plug-ins dans sont programme je suis preneur, mais j'ai trouvé que sa pour l'instant donc je fais avec ce que j'ai.

    Et personne a une solution pour ma question?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Désolé de Up mais personne a une idée sur le problème?

    Je me suis basé sur ce cour: http://drq.developpez.com/dotnet/articles/plugin/vbnet/

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si j'avais à inventé un système de plugin, je ferais une dll contenant une interface

    ceux voulant faire des plugins l'utiliseraient en référence et implémenteraient l'interface

    ensuite tu aurais juste à chercher dans la dll les classes implémentant l'interface grace à la reflection

    tu connaitrais donc les points d'entrées vu que c'est toi qui les définiraient dans l'interface
    ca permettrait de caster les objets pour avoir l'intellisense

    et ca permettrait aussi au passage de mettre plusieurs plugin dans une seule dll
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Les développer auront accès à l'intellisense si il ajoute comme référence le .exe de mon application, après j'ai pas trop compris ce que tu veux dire par dll contenant une interface, parque chaque plug-in aura un onglet dans mon application qui lui sera réservée, je donnerais au développeur le nom de la méthode qui se chargera de faire l'interface graphique du plug-in.

    Le seul problème que j'ai, c'est que quant je charge une dll plug-ins ça me bloque mon application main tant que ça a pas fini de charger, donc je voudrais juste savoir comment faire pour que les dll que je charge est un Thread différent que celui de mon application principale, c'est juste la que je bloque.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Je crois de créer un thread bloque l'accès au méthode de mon programme principale c'est pour sa que sa marche pas, y'a t'il un moyen d'éviter sa?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Si dans le code de ma dll je m'est sa:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show("SAlut", "Error !", MessageBoxButtons.OK, MessageBoxIcon.Error);
    Sa marche


    Si je m'est sa dans ma dll:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonProgramme.Lib_Func.Dire("Salut");
    Sa ne marche pas des que je fais appel à une fonction de mon programme, alors que si je charge la dll sans passer par un nouveau thread les deux codes marche, personne ne peut m'aider?

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    seul le thread principal peut accéder aux controles, c'est peut etre ca ton soucis (m'enfin normalement ca affiche un message d'erreur explicite)

    quel le code de la fonction dire ?

    de plus si tu référencies une dll qui référencie ton exe, ca fait ce qu'on appelle une référence circulaire, chose qui est interdite ...
    dans ce cas mon interface dans une dll reste quand meme une bonne solution
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Et il y'a pas une solution pour partager le controles avec les autres thread?

    Sinon mon code:

    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
    Public Shared Sub Dire(ByVal Texte As String)
            Dim str As String
            str = Clipboard.GetData(DataFormats.Text).ToString
            Clipboard.SetDataObject(Texte, True)
            Clipboard.SetDataObject(Texte, True)
            Clipboard.SetDataObject(Texte, True)
            If Clipboard.GetData(DataFormats.Text) = Texte Then
                PostMessage(Config.Handle_Windows, &H100, 13, IntPtr.Zero)
                PostMessage(Config.Handle_Windows, &H101, 13, IntPtr.Zero)
                Thread.Sleep(50)
                PostMessage(Config.Handle_Windows, &H100, &HA2, IntPtr.Zero)
                PostMessage(Config.Handle_Windows, &H100, &H56, IntPtr.Zero)
                Thread.Sleep(10)
                PostMessage(Config.Handle_Windows, &H101, &HA2, IntPtr.Zero)
                Thread.Sleep(50)
                PostMessage(Config.Handle_Windows, &H100, 8, IntPtr.Zero)
                Thread.Sleep(50)
                PostMessage(Config.Handle_Windows, &H100, 13, IntPtr.Zero)
                PostMessage(Config.Handle_Windows, &H101, 13, IntPtr.Zero)
                PostMessage(Config.Handle_Windows, &H101, &H56, IntPtr.Zero)
                PostMessage(Config.Handle_Windows, &H101, 8, IntPtr.Zero)
                Clipboard.SetDataObject(str, True)
            End If
        End Sub
    Mais bon c'est pas la seule fonction que j'ai testé, des fonction à partager j'en est plus de 30

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Il y'a vraiment pas de solution parque je commence a en avoir mare de chercher et de rien trouver.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par SniP_78 Voir le message
    Et il y'a pas une solution pour partager le controles avec les autres thread?
    demander aux controls d'invoker des déléguer
    (control.invokerequired control.invoke)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Désolé de te déranger encore, mais tu pourrais pas me donner un exemple sur comment partager un dll avec invoke parque je vois pas du tout


    Merci d'avance

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par SniP_78 Voir le message
    comment partager un dll avec invoke
    ca ne veut pas dire grand chose ... donc je vois pas trop quoi te dire


    je pourrais juste dire qu'avant de faire des trucs complexes avec des plugins il faut bien comprendre .net
    http://plasserre.developpez.com/cours/vb-net/
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Je comprends bien le .net mon programme est bien plus complexe que d'ajouter un système de plug-ins.

    Mais dessus je bloque, je ne vois pas comment partager les méthodes de ma dll de mon thread principal avec les autres thread.

    Sur internet j'ai rien trouvé qui pourrait m'aider, apparament vous ne savez pas vous-même comment faire, j'ai juste trouvé comment contrôler un form à partir d'un thread, mais rien d'autre de bien utile c'est pour cette raison que je demande de l'aide, si vous savez pas comment faire dite le moi au lieu de me dire que je sais pas programmé.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    partager les méthodes de ma dll de mon thread principal avec les autres thread
    ceci et la question d'avant n'ont pas de sens en .net
    c'est pour ca que je suppose qu'il vous manque quelques notions et vous oriente vers un tuto

    si vous savez déjà programmer, tant mieux à vrai dire


    on va reprendre depuis le début

    je viens de relire votre premier post, j'ai apparemment porté mon attention sur le thread, alors que l'erreur est que l'instanciation de votre classe n'a pas fonctionné

    avez vous réussi depuis à instancier un Guerrier.Script.Fights depuis la dll pendant l'execution ?


    à priori vous voulez un thread par plugin, c'est pour éviter des soucis sur des plugins mal codés ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Si je n'utilise pas de thread les plug-ins marche sans problème, c'est que quant je veux le rajouter dans un nouveau thread et que la dll utilise des méthodes de mon programme principal que sa ne veux plus marcher (ce qui est logique vu que le thread ne peuvent pas communiquer entre eux, si j'ai bien compris).

    Et moi comme tu le dis, j'ai absolument besoin de faire un nouveau thread au cas ou un des plug-ins utilise un while pour pas que ça bloque ou ralentisse trop mon programme principal.

    Donc mon problème et de partager les méthode et classe de mon thread principal avec les thread des plug-ins (un thread = une dll) et je ne trouve pas de solution valable, je c'est même pas si c'est possible à vrai dire, donc si quelqu'un peut me dire si c'est possible, ou comment faire, ou même une autre méthode ou système de plug-ins.

    Voila, merci d'avance

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    toutes les classes peuvent etre accéder par plusieurs threads, sont les controles qui nécessite de passer par délégués

    as tu un message d'erreur ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Merci, je te dit des que j'ai tester sa, parque la je suis entrain de re faire mon projet en C# et je pense que j'en est pour une bonne semaine.

    Des que j'ai testé je vous dit si c'est Ok ou Non, encore merci

Discussions similaires

  1. JNI/DLL - Extern C : Généralisation ?
    Par ni0urk dans le forum MFC
    Réponses: 1
    Dernier message: 19/01/2006, 08h27
  2. Appel aux fonctions d'une DLL externe ??
    Par Fbartolo dans le forum Access
    Réponses: 7
    Dernier message: 21/11/2005, 17h54
  3. dll ActiveX utilisant une DLL externe
    Par Metal3d dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/11/2005, 18h02
  4. [Jonas]Ajout de dll externes
    Par romainp22 dans le forum JOnAS
    Réponses: 8
    Dernier message: 14/01/2005, 11h41
  5. Dialogue DLL externe
    Par rgarnier dans le forum XMLRAD
    Réponses: 8
    Dernier message: 07/05/2003, 14h28

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