2013-04-13 2 views
1

Je l'interface IDL suivante:passe DII out-argument en Java CORBA

interface ItemA : Item { 
    void actionA(in float a, out long b); 
    }; 

Dans mon implémentation Java Je voudrais appeler l'opération actionA dynamique (en utilisant DII). L'objet item implémente ici l'interface Item et ne sait donc rien sur le actionA. Voici l'extrait:

org.omg.CORBA.Request r = item._request("actionA"); 
r.add_in_arg().insert_float(a); 
// add the out argument 
r.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_void)); 
r.invoke(); 
// get the out argument result 

Comment remplir ces espaces? J'ai essayé différentes approches, principalement différentes utilisations de r.add_out_arg() mais rien ne semble fonctionner. J'apprécierais votre aide!

Répondre

1

Essayez ceci:

org.omg.CORBA.Request r = item._request("actionA"); 
r.add_in_arg().insert_float(a); 
Any val = r.add_out_arg(); 
val.type(orb.get_primitive_tc(TCKind.tk_long)); 
r.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_void)); 
r.invoke(); 

if(r.env().exception() == null) 
{ 
    System.out.println("returned: " + r.arguments().item(1).value().extract_long()); 
} 

Il a fonctionné pour moi (je l'ai déjà vu quelque part ... IDL: P).

+0

Strange tu trébucher sur les gens de votre propre université sur SO. BTW. Vous réalisez certainement, c'est un peu trop tard maintenant :) – Wojtek