我是CORBA的新手,正在尝试为我的QT应用程序创建一个Corba接口。我检查了可以与CORBA一起使用的数据类型,但我不确定是否可以将QT对象用作CORBA函数中的参数。我想传递的是QWSPointerCalibrationData。假设我有一个CORBA服务器代码:
//pass data.screenPoints and data.devPoints
CORBA::Boolean Calibrate( QWSPointerCalibrationData data )
{
...
}
答案 0 :(得分:4)
如果您有代码,这是不可能的。您必须指定与您在应用程序中使用的IDL类型相同的IDL类型,并在CORBA IDL中定义的那些类型与应用程序中定义的类型之间提供(叹气,是)转换函数。作为一个优势,您将应用程序视为未来通信(或RPC)技术的变化,因为您在内部使用自己的类型。在这种情况下,查看文档,QWSPointerCalibrationData
类型有两个数据成员:
QPoint devPoints[5]
QPoint screenPoints[5]
然后你应该先在你的IDL中声明QPoint
类型然后QWSPointerCalibrationData
(我在C_
前加上名称来表示CORBA类型):
// IDL
struct C_Point { long x; long y; };
typedef sequence<C_Point> Points;
struct C_WSPointerCalibrationData
{
Points devPoints;
Points screenPoints;
};
然后,您的服务器方法必须是:
CORBA::Boolean Calibrate( C_QWSPointerCalibrationData const& data )
{
QWSPointerCalibrationData qpcd = convert_from_CORBA_QWSPointerCalibrationData(data);
// use qpcd as usual here
}
和您必须自己编写convert_from_CORBA_QWSPointerCalibrationData
函数(以及将该类型转换为CORBA对应函数的相应函数)。有一些工具可以进行转换,但是,遗憾的是,必须这样做。