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:
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:
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:
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