Bonjour, je débute en C+, et je réalise actuellement un programme C+ piloté depuis un programme en Fortran via une interface C. Le but :

1) importer un fichier de géométrie STEP depuis une librairie C++ appelée OPENCascade
2) Accéder séquentiellement via le fortran à la classe Open Cascade contenant cette géométrie. Pour cela j'ai besoin de garder un pointeur sur ma classe qui est en paramètre de mes fonction appelées depuis le Fortran.

D'après la doc d'Intel, il existe une correspondance entre les pointeurs Fortran et le type void*. Je pense donc utiliser le type void* et StaticCast pour récupérer la classe pointée dans une nouvelle fonction C+. Ca compile mais mon nouveau pointeur ne pointe pas vers mon objet instancié précédemment (j'ai pour cela ajouté un attribut monEntier à la classe, initialisé à 0 dans le constructeur et modifié à 1247 dans la 1ère fonction. Dans la 2ème fonction, myImportBis->monEntier = 1 ...)

Quelqu'un a t'il une idée sur la bonne manière de procéder pour récupérer la classe dans la 2ème fonction ? Merci d'avance


Ma fonction C++
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
 
extern "C" void ReadSTEP(void* ptr, char* NomFichier)
{
	Import* myImport=new Import(); // Création de la classe contenant la géométrie
	myImport->ReadSTEP(NomFichier); // Import des données géométriques
	myImport->monEntier=1247;
	ptr=&myImport; // Assignation du pointeur passé en référence.
}
 
extern "C" void GetNoeuds(void* ptr, char* NomFichier, float tablo[10])
{
	Import *myImportBis=static_cast<Import*>(ptr); 
	myImportBis->GetNoeuds(NomFichier, tablo); // 1ère consultation de la classe,
	delete myImportBis;
}
Mon Fortran qui appelle le C++ via une couche de C.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
      program fmain
      REAL TABLO(10)
      integer LNAME
      integer*4 PTR
      CHARACTER(LEN=256)::NAME
 
      CALL CREADSTEP(PTR, TRIM(NAME))
      CALL CGETNOE(PTR, TRIM(NAME),TABLO)
end program