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 :

Erreur Thread sur Appel dans DLL


Sujet :

VB.NET

  1. #1
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 682
    Points : 1 952
    Points
    1 952
    Par défaut Erreur Thread sur Appel dans DLL
    Salut,

    J'ai une erreur pour appeler une sub qui est dans une dll, à partir d'un nouveau thread.
    L'erreur est : la methode ... n'a pas une signature compatible avec le delegue 'Delegate Sub ParameterizedThreadStart(obj As Object)'

    Voici mon code d'appel - je souligne la ou est l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim NouveauThread As New Thread(New ParameterizedThreadStart(AddressOf LeNomDeMaSubDansDLL))
    qui appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Shared Sub LeNomDeMaSubDansDLL()
    Qq a une idee du pourquoi du comment ?
    Merci pour votre aide.
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  2. #2
    Expert éminent
    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
    Points : 8 344
    Points
    8 344
    Par défaut
    Remplacer ParameterizedThreadStart par ThreadStart

  3. #3
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 682
    Points : 1 952
    Points
    1 952
    Par défaut
    Merci smyley, mais ca ne change rien.

    Le probleme, c'est que si je place la sub dans le meme fichier class, il n'y a plus d'erreur et ca fonctionne.
    Donc la difference, c'est juste que la sub est dans une dll.
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  4. #4
    Expert éminent
    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
    Points : 8 344
    Points
    8 344
    Par défaut
    Ahh ... mais ton sub il est dans une classe non ? parce qu'il me semble que tu as le droit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... new ThreadStart(LInstanceDeLaClasse.LaSub)

  5. #5
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 682
    Points : 1 952
    Points
    1 952
    Par défaut
    J'ai deja essaye cela, mais ca ne change rien.

    Il y a peut etre un rapport avec le fait que l'appel du new thread soit dans un module ???
    Je flanche ...
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Quand tu appelles la méthode, tu spécifie le nom de la classe avant le nom de la méthode ?
    Si oui, es tu sûr alors que cette méthode est statique (Shared en VB.NET) ?
    Et si cette méthode n'est pas statique, alors il faut que tu crées d'abord une instance de cette classe et que tu passes ensuite la méthode monInstance.MaMethode dans le constructeur de ThreadStart.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  7. #7
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 682
    Points : 1 952
    Points
    1 952
    Par défaut
    Oui à tout saumonagile.
    D'ailleurs sur mon premier post, on voit bien le shared.
    Puis l'erreur ne vient pas de la, car il trouve bien le sub dans la dll (ca c'est sur)
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  8. #8
    Expert éminent
    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
    Points : 8 344
    Points
    8 344
    Par défaut
    J'arrive pas à le mettre dans un module (quelle horreur vb ...)
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Module Module1
     
    	Public Shared Sub LeNomDeMaSubDansDLL()
    		System.Windows.Forms.MessageBox.Show("Yo !")
    	End Sub
     
    End Module
    Le compilo m'éjecte en me disant que je n'ai pas le droit de mettre une fonction Shared dans un module. Pourrai tu montrer ton code stp ? (juste pour éviter d'apprendre le vb ...)


    Par contre si je fait ça, ça marche :
    - Dans une application vb
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	Private Sub Button1Click(sender As Object, e As EventArgs)
    		Dim a As New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf vb_test.Module1.LeNomDeMaSubDansDLL))
    		a.Start()
    	End Sub

    -Dans une dll vb
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Class Module1
     
    	Public Shared Sub LeNomDeMaSubDansDLL()
    		System.Windows.Forms.MessageBox.Show("Yo !")
    	End Sub
     
    End Class

  9. #9
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 682
    Points : 1 952
    Points
    1 952
    Par défaut
    Alors j'ai trouve le pourquoi du comment de cette erreur.
    En fait, on ne peut passer qu'1 seul argument à un thread, sinon ca donne cette erreur.

    Sinon smyley, en lisant ton dernier post, moi aussi je ne suis pas arrive à inserer un shared dans un module ... j'ai du contourner en tout placant dans une classe.

    Je vais magouiller pour passer ma dizaine d'arguments en les rassemblant en 1 seul et je vous tiens au courant.
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  10. #10
    Expert éminent
    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
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Danyel Voir le message
    Je vais magouiller pour passer ma dizaine d'arguments en les rassemblant en 1 seul et je vous tiens au courant.
    ça doit se faire. Soit tu passes un object[] ou alors tu fais ça :
    Code vb : 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    	Public Class CustomThread(Of T)
    		Private _internalThread As Thread
     
    		Public ReadOnly Property InternalThread() As Thread
    			Get
    				Return _internalThread
    			End Get
    		End Property
     
    		Private _targetMethod As T
     
    		Public Overridable ReadOnly Property TargetMethod() As T
    			Get
    				Return _targetMethod
    			End Get
    		End Property
     
    		Public Sub New(targetMethod As T)
    			If targetMethod Is Nothing Then
    				Throw New ArgumentNullException("targetMethod")
    			End If
    			If TryCast(targetMethod, [Delegate]) Is Nothing Then
    				Throw New ArgumentException("targetMethod doit être un Delegate")
    			End If
     
    			_targetMethod = targetMethod
    			_internalThread = New Thread(New ThreadStart(AddressOf _internalStart))
    		End Sub
     
    		Private _instanceArguments As Object() = Nothing
     
    		Protected Overridable Sub _internalStart()
    			TryCast(TargetMethod, [Delegate]).DynamicInvoke(_instanceArguments)
    			_instanceArguments = Nothing
    		End Sub
     
    		Public Overridable Sub Start(ParamArray arguments As Object())
    			_instanceArguments = arguments
    			_internalThread.Start()
    		End Sub
    	End Class
     
    	Public Sub New()
    		'
    		' The InitializeComponent() call is required for Windows Forms designer support.
    		'
    		InitializeComponent()
     
    		'
    		' TODO: Add constructor code after the InitializeComponent() call.
    		'
     
    		Test()
    	End Sub
     
    	Public Delegate Function MsgBoxEvent(caption As String, title As String) As DialogResult
     
    	Public Sub Test()
    		Dim _thread As New CustomThread(Of MsgBoxEvent)(AddressOf MessageBox.Show)
    		_thread.Start("Lolz", "Titre")
    	End Sub

  11. #11
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 682
    Points : 1 952
    Points
    1 952
    Par défaut
    Merci smyley pour tout cela, mais sans aller aussi loin, j'ai juste concatener tous mes arguments dans un simple text, puis un petit split pour le sens inverse et traitement.

    Pour conclure, plus de probleme
    Thx à tous.
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

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

Discussions similaires

  1. Erreur OLE sur appel Javascript dans TWebBrowser
    Par 2nd Floor dans le forum Débuter
    Réponses: 8
    Dernier message: 21/09/2011, 15h49
  2. [XL-2010] Erreur convention d'appel de .DLL incorrect sur import de classe
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/09/2011, 12h23
  3. appel pointeur sur fonction dans DLL
    Par dietrich dans le forum Windows
    Réponses: 6
    Dernier message: 24/10/2007, 21h48
  4. Erreur 404 sur appel de vues dans tuto de Rob
    Par *.Har(d)t dans le forum MVC
    Réponses: 16
    Dernier message: 10/07/2007, 20h06
  5. Réponses: 8
    Dernier message: 13/09/2005, 21h05

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