因为你有代码,这是不可能的。您必须指定与您在应用程序中使用的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 对应的对应函数)。有一些工具可以进行这种转换,但是是的,很遗憾,必须这样做。