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 :

[CallBack/Interop] Pourquoi ai-je une erreur memory violation ?


Sujet :

C++/CLI

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Points : 68
    Points
    68
    Par défaut [CallBack/Interop] Pourquoi ai-je une erreur memory violation ?
    Bonjour j'ai un problème assez génant en C++/Cli. J'utilise une Dll non managée et lorsque la fonction est appelée une fois elle plante a la fin de l'execution je ne comprend pas. regarder dans mon code a /* Erreur Ici memory violation*/

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
        __gc class ManageCallBack
        {
        private:
            __nogc class CallBack
            {
            private :
                static  void CALLBACK UnmanagedGetCommand(short id)
                {                
                    ManageCallBack* pew = ManageCallBack::GetClass();
                    pew->CallBackDelegate->Invoke(id);
                                    /* Erreur Ici memory violation*/
                                   //plantage de la function le invoke marche
                }    
     
            public : 
                void StartInitCallBack()
                {
                    char Hostname_Radar [8] = {"RADAR"}; 
                    short init_imo_func = NavnetInitImoFunc
    (Hostname_Radar,&CallBack::UnmanagedGetCommand );
                }
            };
        private:
            static ManageCallBack * m_pClass = NULL;
            CallBack * m_nogcCallBack;
        public :
            __delegate void Callback_Function_GetCommand(short id);
            Callback_Function_GetCommand * CallBackDelegate;
     
            ManageCallBack()
            {
                m_pClass = this;
                m_nogcCallBack = new CallBack();
            }
            ~ManageCallBack()
            {
                delete m_nogcCallBack;
            }
            static ManageCallBack* GetClass()
            {    
                return m_pClass;        
            }
            void StartInitCallBack()
            {
                m_nogcCallBack->StartInitCallBack();
            }
        };
    Dans ma form j'ai déclarer un objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ManageCallBack * testCallBack;
    Dans ma fonction button_click le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    testCallBack = new ManageCallBack();
    testCallBack->CallBackDelegate = new ManageCallBack::Callback_Function_GetCommand
    (this,&Form1::GetCommand);
    testCallBack->StartInitCallBack();
    Ma function get commande fait ça (mais elle s'execute bien ça marche )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void GetCommand(short id)
    {
        MessageBox::Show("On est dans GetCommand", "Alarm",
     MessageBoxButtons::OK,MessageBoxIcon::Exclamation);
    }
    Je ne comprend pas ce qui pose problème

    --------------------------------
    Navarro Anaël genki

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    premiere question et pas des moindres, si tu utilises le c++/cli, pourquoi utilises-tu la vieille syntaxe du c++ .net 1.x
    c'est fini les __gc et autres *
    place aux handles ^ et autres gcnew

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Points : 68
    Points
    68
    Par défaut Désolé
    Alors c'est justement ce que j'ai remarquer lol (ce n'est pas mon code) c'est le code d'une autre personne et je me suis pas plus casser la tete que ça sur le moment j'ai tout repasser en 2.0 et la seule solution que j'ai trouver c'est de donner une fonction call back qui est déclarée a l'extérieur de ma class form. Mais je ne comprend pas pourkoi....

  4. #4
    Membre habitué Avatar de deeal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 218
    Points : 169
    Points
    169
    Par défaut
    juste une question au passage, je n'ai pas travaille avec managed c++, mais je sais que si tu as un type non manage a l'interieur d'une classe managee, ca rend ta classe non-manage, non?
    et la tu declare un class __gc, et a l'interieur tu delcares une class __nogc
    donc je crois que ca peut poser probleme ce genre de declaration et ca rend ta classe (externe) non-managed ou unsafe

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par deeal
    juste une question au passage, je n'ai pas travaille avec managed c++, mais je sais que si tu as un type non manage a l'interieur d'une classe managee, ca rend ta classe non-manage, non?
    On peut avoir dans une classe managée un pointeur sur un type managé.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/01/2008, 09h55
  2. Réponses: 7
    Dernier message: 29/06/2006, 08h54
  3. [VB.Net] Pourquoi ai-je une erreur à l'exécution d'une requête ?
    Par zooffy dans le forum Accès aux données
    Réponses: 3
    Dernier message: 25/06/2006, 10h35
  4. [C# 2.0] Pourquoi ai-je une erreur à l'exécution d'un Filter Databind ?
    Par diaboloche dans le forum Accès aux données
    Réponses: 5
    Dernier message: 24/06/2006, 18h57
  5. [ADO.Net][Access] Pourquoi ai-je une erreur lors de l'Update ?
    Par nazimb dans le forum Accès aux données
    Réponses: 1
    Dernier message: 15/05/2006, 09h37

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