+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    novembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2011
    Messages : 21
    Points : 3
    Points
    3

    Par défaut comment utiliser methodInvoker en c++ cli?

    Bonjour, j'ai ce code en c# qui est correcte

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    private void HandleFarmStateChanged(object sender, ValueChangedEventArgs<CFarm.FarmState> e)
            {
                if (control.InvokeRequired)
                {
                    control.Invoke(new MethodInvoker(delegate
                    {
                        HandleFarmStateChanged(sender, e);
                    }));
                    return;
                }
     
               //FarmStateStatusLabel.Text = e.NewValue.ToString();
                Console.WriteLine(e.NewValue.ToString());
                Console.WriteLine("       ");
            }
    mais je le veux en c++ cli et c'est ce que j'ai essayé

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    void GetNotifications::HandleFarmStateChanged(Object ^sender, ValueChangedEventArgs<CFarm::FarmState> ^e)
    {
    	if (control->InvokeRequired)
                {
    				control->Invoke(
        gcnew System::Windows::Forms::MethodInvoker(
            this,
    		&GetNotifications::HandleFarmStateChanged
        )
    );
                    return;
                }
     
    	Console::WriteLine(e->NewValue.ToString());
    	Console::WriteLine("       ");
    }
    et pourtant j'ai toujour cette erreur
    "Error 1 error C3352: 'void GetNotifications::HandleFarmStateChanged(System::Object ^,BaseLibCS::ValueChangedEventArgs<T> ^)' : the specified function does not match the delegate type 'void (void)'"

    Merci d'avance
    Modifier

  2. #2
    Expert Confirmé Sénior

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : juin 2007
    Messages : 2 335
    Points : 5 482
    Points
    5 482

    Par défaut

    C'est assez simple, void HandleFarmStateChanged(Object^,ValueChangedEventArgs<T>^) n'est pas une void f(void)Il "suffit" de creer une fonction sans arguments, qui fournit les arguments requis.

    Pour les détails, je ne connais ni C# ni C++/CLI

    ce que tu fais ressemble (d'après le message d'erreur) à:
    Code :
    1
    2
    3
    4
    5
    6
    void myListener(int, int);
    void registerListener( void *(void) );
    //...
    {
        registerListener(myListener);
    }
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • La plus sotte des questions est celle qu'on ne pose pas.

    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Expert Confirmé Sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    3 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : février 2005
    Messages : 3 144
    Points : 5 069
    Points
    5 069

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •