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

MFC Discussion :

Appel d'une méthode C++ depuis un code C


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut Appel d'une méthode C++ depuis un code C
    Bonjour à vous tous!
    Depuis un certain temps, je me suis mis dans l'idée de faire communiquer du C avec C++. L'idée étant de faire exécuter d'appeler une méthode C++ depuis une fonction C, dans un autre fichier

    Voici le 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
    25
    26
    27
    28
    29
    30
     
    // PartCPP.h: interface for the CPartCPP class.
    //
    //////////////////////////////////////////////////////////////////////
     
    #if !defined(AFX_PARTCPP_H__1C91159B_25CE_4F3A_AF02_38000EB380E7__INCLUDED_)
    #define AFX_PARTCPP_H__1C91159B_25CE_4F3A_AF02_38000EB380E7__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
     
    #include "test.c"
    #include <stdio.h>
     
    class CPartCPP  
    {
    public:
    	CPartCPP();
    	virtual ~CPartCPP();
     
     
    	static int f(char * chaine) { printf("%s\n",chaine);return 0;};
        void* g(char x, float y) {};
        void* h(char x, float y) {};
        void* i(char x, float y) {};
     
    };
     
    #endif // !defined(AFX_PARTCPP_H__1C91159B_25CE_4F3A_AF02_38000EB380E7__INCLUDED_)
    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
     
    // PartCPP.cpp: implementation of the CPartCPP class.
    //
    //////////////////////////////////////////////////////////////////////
     
    #include "PartCPP.h"
     
    //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////
     
    CPartCPP::CPartCPP()
    {
            //Création de la structure qui contiendra le pointeur vers la méthode
    	st_inter = new T_intermediaire();
            //Affectation du pointeur et précision du schéma d'appel de la méthode
    	st_inter->fct = (int (__cdecl *)(char *))(&CPartCPP::f);
    }
     
    CPartCPP::~CPartCPP()
    {
    	delete st_inter;
    }
     
     
    void main()
    {
    	CPartCPP *PartCPP;
    	PartCPP = new CPartCPP();
            functest();
    }
    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
     
    #ifndef _INTER
    #define _INTER 1
     
    typedef struct _Tintermediaire
    {
            //Pointeur vers la fonction qui va nous interresser : fonction qui prend 
            //en parametre un char* et qui retourne un int.
    	int(*fct)(char*);
    } T_intermediaire;
     
    static T_intermediaire* st_inter;
     
    #endif
     
    void functest()
    {
            // Appel à la méthode, ET CA MARCHE!!!
    	(*st_inter->fct)("Coucou les enfants!Dites non a la drogue!");
    }
    Ma question est la suivante : Serait il possible de savoir si ce code est "sans danger"?
    J'utilise un cast (int (__cdecl *)(char *)) et je n'ai aucune idée des répercutions possibles.
    Pourrais je avoir l'avis d'une personne qui s'y connais.

    Merci d'avance

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ça ne me parait PAS sans danger : Normalement, tu ne devrais pas avoir besoin d'un cast.
    Mais déjà, pour commencer, utilise un typedef, tu t'y retrouveras mieux avec.
    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 régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    Un typedef de quoi?
    Parce que là j'ai du mal a comprendre...

  4. #4
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    typedef int (*FUNCTION)(char*);
     
    FUNCTION func=...;
    int result=func(...);
    c'est plus facile avec un typedef surtout pour les cast

    @+

Discussions similaires

  1. Appel d'une dll C depuis du code Python
    Par gnayoke dans le forum Général Python
    Réponses: 7
    Dernier message: 18/02/2010, 14h26
  2. [JNI] appel d'une méthode java depuis le code natif
    Par myryad dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 19/05/2009, 11h23
  3. Appeller une fonction Javascript depuis le Code VB
    Par chrislcf dans le forum ASP.NET
    Réponses: 5
    Dernier message: 08/08/2008, 12h41
  4. Appel d'une méthode d'un bean JSF depuis une JSP
    Par ::Fistons dans le forum JSF
    Réponses: 4
    Dernier message: 19/10/2007, 15h43
  5. [Compilation] Appel d'une fonction C++ depuis du code C
    Par bladerunners dans le forum C++
    Réponses: 1
    Dernier message: 06/09/2006, 14h26

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