Bonjour,
j'appelle depuis du code C depuis du code Ada.
Tout marche très bien sauf quand le code Ada doit faire des entrées/sorties notamment des sorties sur la sortie standard : mon programme C (qui appelle l'ADA) plante.
Pourquoi une telle erreur à votre avis ?
Pour info, mon code en C :
le Voiture.h :
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 #include <stdio.h> #include "Voiture.h" int main(void) { Voiture v; int i=0; int coeff = 2; v.modele[0]='S'; v.vitesse_max=120; v.vitesse_moyenne=0; for(i=0;i<6;i++){ v.rapport_boite_de_vitesse[i]=i+1; } printf("\nVoiture creee en C - vit moy = %f",v.vitesse_moyenne); /** Appel de la méthode native Ada depuis C **/ calculer_vitesse_moyenne_ada(&v,coeff); printf("\nVoiture modifiee en ada - vit moy = %f",v.vitesse_moyenne); return 0 ; }
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 /* DO NOT EDIT THIS FILE - it is machine generated */ /* Header for class Voiture */ #ifndef _Included_Voiture #define _Included_Voiture #ifdef __cplusplus extern "C" { #endif typedef struct { char modele[10]; float vitesse_max; float rapport_boite_de_vitesse[6]; float vitesse_moyenne; } Voiture; extern void calculer_vitesse_moyenne_ada(); #ifdef __cplusplus } #endif #endif
et mon code ADA:
...le simple fait de faire un "put_line" en Ada fait tout planter. Sans le put_line tout est OK...
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 with Interfaces.C.Strings; with Ada.Text_IO; with Ada.Unchecked_Conversion; with Ada.Characters.Handling; use Ada.Characters.Handling; -- for To_Wide_String with Ada.Text_io;use Ada.text_io; package body Native_Pkg is -- Procedure Ada existante. procedure calculer_vitesse_moyenne_ada (X : in out voiture; coeff : integer) is begin X.vitesse_moyenne := (X.vitesse_max / float(coeff) * (X.rapport_boite_de_vitesse(6) - X.rapport_boite_de_vitesse(1))); put_line("HEY ! from ADA !"); end calculer_vitesse_moyenne_ada; end Native_Pkg;
Merci d'avance pour une aide
Partager