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 对象作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章

在 Java CORBA 中传递 DII 参数

如何将插槽作为参数传递

CORBA 和 RMI 的区别

GraphQL.js Node/Express:如何将对象作为 GraphQL 查询参数传递

如何将对象参数作为哈希表传递给 json arm 模板?

如何将对象属性作为参数传递? (JavaScript)