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(); }Ma question est la suivante : Serait il possible de savoir si ce code est "sans danger"?
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!"); }
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
Partager