CORBA:如何将 QT 对象作为参数传递
Posted
技术标签:
【中文标题】CORBA:如何将 QT 对象作为参数传递【英文标题】:CORBA : How to pass a QT object as a parameter 【发布时间】:2011-09-30 07:11:43 【问题描述】:我是 CORBA 的新手,正在尝试为我的 QT 应用程序创建一个 Corba 接口。我检查了可以与 CORBA 一起使用的数据类型,但我不确定是否可以将 QT 对象用作 CORBA 函数中的参数。我想要传递的是 QWSPointerCalibrationData。假设我有一个 CORBA 服务器代码:
//pass data.screenPoints and data.devPoints
CORBA::Boolean Calibrate( QWSPointerCalibrationData data )
...
这可能吗?
如果是,如何在 IDL 文件中声明?
如果不是,我可以使用什么 CORBA 数据类型来传递这些类型的数据?
【问题讨论】:
【参考方案1】:因为您有代码,所以这是不可能的。您必须指定与您在应用程序中使用的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 的对应函数)。有一些工具可以进行这种转换,但是是的,很遗憾,必须这样做。
【讨论】:
嗨 Diego,感谢您提供的所有信息...我会试一试! :) 如何在 IDL 中声明 Calibrate() 函数?如果我将其声明为布尔校准(在 C_QWSPointerCalibrationData const& 数据中),我会在操作参数中收到语法错误... IDL 不是 C++,所以例如你没有“`const&”。尝试删除它,它应该可以工作。以上是关于CORBA:如何将 QT 对象作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章