IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

Interfaçage ADA / C : problème IO Ada


Sujet :

Ada

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut Interfaçage ADA / C : problème IO Ada
    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 :
    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 ;
    }
    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
     
    /* 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:
    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;
    ...le simple fait de faire un "put_line" en Ada fait tout planter. Sans le put_line tout est OK...


    Merci d'avance pour une aide

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Il faut initialiser le runtime ada. C'est expliqué dans la doc de gnat, de mémoire, c'est des appels à adainit et adafini qu'il faut.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut Merci !
    Merci beaucoup, c'est parfait, ça marche très bien maintenant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/10/2013, 11h06
  2. Problème compilation ADA
    Par misswatson dans le forum Ada
    Réponses: 1
    Dernier message: 03/10/2011, 09h14
  3. Interfaçage Caml/C++ : problème de linkage
    Par Anveena dans le forum Caml
    Réponses: 5
    Dernier message: 17/09/2011, 19h07
  4. Problème Pointeur ADA.
    Par barry_mohamed91 dans le forum Ada
    Réponses: 6
    Dernier message: 28/02/2011, 18h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo