2011-09-30 6 views
1

Je suis nouveau à CORBA et essaye de créer une interface Corba pour mon application QT. J'ai vérifié les types de données que vous pourriez utiliser avec CORBA, mais je ne suis pas sûr de pouvoir utiliser un objet QT en tant que paramètre dans une fonction CORBA. Ce que je voudrais transmettre est QWSPointerCalibrationData. Disons que j'ai un code de serveur CORBA:CORBA: Comment passer un objet QT en tant que paramètre

//pass data.screenPoints and data.devPoints 

CORBA::Boolean Calibrate(QWSPointerCalibrationData data) 
{ 
    ... 
} 
  • Est-ce possible?
  • Si oui, comment le déclarer dans le fichier IDL?
  • Sinon, quel type de données CORBA puis-je utiliser pour pouvoir transmettre ce type de données?

Répondre

4

Comme vous avez le code, cela n'est pas possible. Vous devez spécifier des types IDL équivalents à ceux que vous utilisez dans votre application, et fournir des fonctions de conversion (soupir, oui) entre les types définis dans CORBA IDL et ceux définis dans votre application. Comme un avantage, vous aveugle votre application pour les futurs changements dans la technologie de communication (ou RPC), que vous utilisez en interne vos propres types. Dans ce cas, en regardant la documentation, le type QWSPointerCalibrationData a deux membres de données:

QPoint devPoints[5] 
QPoint screenPoints[5] 

Ensuite, vous annonciez dans votre IDL d'abord le type QPoint puis le QWSPointerCalibrationData (je PREPEND les noms avec C_ pour désigner les types de CORBA):

// IDL 
struct C_Point { long x; long y; }; 
typedef sequence<C_Point> Points; 
struct C_WSPointerCalibrationData 
{ 
    Points devPoints; 
    Points screenPoints; 
}; 

Ensuite, votre méthode de serveur doit être:

CORBA::Boolean Calibrate(C_QWSPointerCalibrationData const& data) 
{ 
    QWSPointerCalibrationData qpcd = convert_from_CORBA_QWSPointerCalibrationData(data); 
    // use qpcd as usual here 
} 

et vous devez écrire la fonction convert_from_CORBA_QWSPointerCalibrationData vous-même (et la correspondante qui convertit ce type à la contrepartie CORBA). Il y a quelques outils disponibles pour faire cette conversion, mais oui, c'est dommage, cela doit être fait.

+0

Salut Diego, merci pour toutes les infos ... Je vais essayer! :) – Owen

+0

Comment déclarer la fonction Calibrate() dans l'IDL? Si je le déclare comme calibrage booléen (dans C_QWSPointerCalibrationData const & data), j'obtiens une erreur de syntaxe dans les paramètres d'opération ... – Owen

+1

IDL n'est pas C++, donc vous n'avez pas "const" par exemple. Essayez de supprimer cela et cela devrait fonctionner. –

Questions connexes