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++
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
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; }
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
Partager