Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Ada
Ada Forum d'entraide sur la programmation en langage Ada
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/07/2011, 19h12   #1
Invité de passage
 
Inscription : janvier 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 4
Points : 4
Points : 4
Par défaut Interfaçage Ada/Java : Utilisation des constructeurs avec Java_Constructor

Bonjour,

Je souhaiterais faire appel à des méthodes java à partir de mon code Ada.

Pour cela, j'ai vu qu'il était possible d'utiliser jvm2ada qui me génère les spec nécessaire.

Néanmoins, le problème se présente lorsque que je veux faire appel au constructeur dans ma procédure qui me sert de main. Après un build j'obtiens ceci
Citation:
undefined reference to `_new_foo'

Une idée ?

Configuration:
Gnat-GPL 2009
JVM-GNAT 2009
Eclipse Indigo avec GnatBench 2.5
SDK 1.5
modification de la bibliothèsque JRE suivant les indications de ce lien

Code :
1
2
3
4
5
6
7
8
9
10
// code en java
public class Foo {
    public int x;
    public int Y;

    public void someProcedure (int i){
    	System.out.println("i=" + i);
    }
}
Code :
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
-- spec obtenu de jvm2ada

pragma Extensions_Allowed (On);
with Java.Lang.Object;

package Foo is
   pragma Preelaborate;

   -----------------------
   -- Type Declarations --
   -----------------------

   type Typ;
   type Ref is access all Typ'Class;

   ------------------------
   -- Array Declarations --
   ------------------------

   type Arr_Obj is array (Natural range <>) of Ref;
   type Arr     is access all Arr_Obj;
   type Arr_2_Obj is array (Natural range <>) of Arr;
   type Arr_2     is access all Arr_2_Obj;
   type Arr_3_Obj is array (Natural range <>) of Arr_2;
   type Arr_3     is access all Arr_3_Obj;

   type Typ is new Java.Lang.Object.Typ with record

      ------------------------
      -- Field Declarations --
      ------------------------

      X : Java.Int;
      pragma Import (Java, X, "x");

      Y : Java.Int;
      pragma Import (Java, Y, "Y");

   end record;

   ------------------------------
   -- Constructor Declarations --
   ------------------------------

   function New_Foo (This : Ref := null)
                     return Ref;

   -------------------------
   -- Method Declarations --
   -------------------------

   procedure SomeProcedure (This : access Typ;
                            P1_Int : Java.Int);

   ---------------------------
   -- Variable Declarations --
   ---------------------------

   Global : Java.Int;
private
   pragma Convention (Java, Typ);
   pragma Java_Constructor (New_Foo);
   pragma Import (Java, SomeProcedure, "someProcedure");

end Foo;
pragma Import (Java, Foo, "Foo");
pragma Extensions_Allowed (Off);

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- sous programme servant de main
with Ada.Text_IO;  use Ada.Text_IO;
with Foo;  use Foo;
with Java;  use Java;

procedure main is

instance : Foo.Ref ;

begin
   Put_Line ("Hello World!");
   instance := New_Foo(This => null);
end main;
willburn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 11h15   #2
Invité de passage
 
Inscription : janvier 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 4
Points : 4
Points : 4
En y repensant, ça doit être au niveau du link avec le code de ma classe Foo qu'il y a un problème. Il n'y a pas de fichier Foo.o...

Mais ce que j'essayais de faire ne correspondait pas à ce que je souhaitais faire. Là, j'essayais de faire un exécutif qui ferait appel à des méthodes d'une classe java.
Mon but était d'écrire une classe java qui fait appel à des opérations de code en Ada qui lui même fait appel à des méthodes d'une autre classe Java.

J'ai déjà réussi à faire la 1ere étape, soit l'appel d'opération Ada depuis Java via Gnat-AJIS qui me créer une librairie dll représentant mon code Ada et qui est chargé dans la JVM. Donc ce qu'il faudrait que j'essaye de faire c'est de faire en sorte que ma librairie dll appelle les méthodes de ma classe Java en allant voir dans la JVM.

Est ce quelqu'un aurait jeté un oeil à ce que a fait Henri ?
Si j'ai bien compris, il produit un exécutable en jar qui va exécuter son Ada qui utilise la bibliothèque JRE, c'est bien ça ?
willburn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h26.


 
 
 
 
Partenaires

Hébergement Web