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 379
    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 379
    Points : 41 573
    Points
    41 573
    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.

  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