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

C++/CLI Discussion :

[COM] Assigner une méthode à un événement


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Par défaut [COM] Assigner une méthode à un événement
    Bonjour tout le monde,

    Contexte:
    J'ai un usercontrol en C# que je dois intégrer dans une forme en VB.
    Dans le COMM, je dois accrocher mes méthodes au événements du usercontrol.
    Usercontrol C# -> Wrapper C++/CLI compile en clr -> COMM -> forme VB

    Ce que j'ai fait à date:
    J'ai créé un Wrapper en clr
    J'ai ma méthode en COMM qui est accrochée à un événement de mon usercontrol.

    Problème:
    J'ai assigné la méthode en COMM comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_styleEditorCtrl->OnInfoViewerMouseRClick += gcnew System::Windows::Forms::MouseEventHandler(&CStyleView::OnMouseRClickStyleBrowser);
    Mais la méthode OnMouseRClickStyleBrowser est static et elle utilise des object non statics et ce qui me donne une erreur à la compilation.

    Comment dois-je faire pour assigner ma méthode non static à mon événement?

    Merci d'avance pour les réponses et si vous avez besoin de plus d'informations, n'hésitez pas!

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Les pointeurs de fonction ordinaires n'acceptent pas les méthodes non-statiques, mais les délégués, si: Le plus simple est donc de rajouter une méthode non-statique à ton wrapper C++/CLI, qui se charge de l'appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    m_styleEditorCtrl->OnInfoViewerMouseRClick += gcnew System::Windows::Forms::MouseEventHandler(this, &MonWrapper::OnMouseRClickStyleBrowser);
     
    private: void OnMouseRClickStyleBrowser(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)
    {
    	m_pStyleView->OnMouseRClickStyleBrowser(ConvertirArgumentEvenement(e));
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Par défaut
    Merci Médinoc, mais j'obtiens toujours cette même erreur lorsque j'utilise des objets managed
    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
    #include <afxwinforms.h>
     
    #ifndef EXPORT_CATTOOL
    #define EXPORT_CATTOOL __declspec(dllimport)
    #endif
     
    class EXPORT_CATTOOL CStyleEditorWrapper
    {
    	public:
    		CStyleEditorWrapper();
    		Microsoft::VisualC::MFC::CWinFormsControl<CatalogToolsTabControl::StyleEditor::StyleEditor> m_styleEditorCtrl;
     
    	private:
    		void OnMouseRClickStyleBrowser(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e);
    };
    -------------------------
    error C3395: 'CStyleEditorWrapper::OnMouseRClickStyleBrowser' : __declspec(dllexport) cannot be applied to a function with the __clrcall calling convention
    Connaîtrais-tu un moyen pour régler se problème?
    Merci d'avance!

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    CATTOOL, c'est la DLL que tu cherches à créer?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Par défaut
    Oui, CATTOOL est une DLL que je dois créer

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Dans ce cas, j'ai l'impression que tu ne peux pas exporter une classe non-managée ayant des méthodes managées (même si elles sont privées, apparemment ).

    Donc, tu devrais rendre ta classe CStyleEditorWrapper non-exportée, et exporter seulement le wrapper en C++/CLI.
    Ou bien, t'arranger pour qu'elle soit entièrement non-managée, et ses méthodes aussi (via #pragma unmanaged, etc.).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/01/2014, 17h30
  2. Réponses: 5
    Dernier message: 07/08/2008, 18h53
  3. [Evènement]Accrocher un évènement à une méthode
    Par Jabbal'H dans le forum Langage
    Réponses: 5
    Dernier message: 11/04/2008, 12h20
  4. Attacher un évènement à une méthode de la classe courante
    Par hush dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/06/2007, 00h40
  5. [Evénements]Ajout d'une méthode sur un événement d'un bouton
    Par Salam59 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/03/2006, 15h47

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