CORBA: как передать объект QT в качестве параметра - PullRequest
1 голос
/ 30 сентября 2011

Я новичок в CORBA и пытаюсь создать интерфейс Corba для моего приложения QT.Я проверил типы данных, которые вы могли бы использовать с CORBA, но я не уверен, смогу ли я использовать объект QT в качестве параметра в функции CORBA.То, что я хотел бы передать это QWSPointerCalibrationData.Допустим, у меня есть код сервера CORBA:

//pass data.screenPoints and data.devPoints

CORBA::Boolean Calibrate( QWSPointerCalibrationData data )
{
  ...
}
  • Возможно ли это?
  • Если да, как мне объявить это в файле IDL?
  • если нет, какой тип данных CORBA я могу использовать, чтобы передавать эти типы данных?

1 Ответ

4 голосов
/ 30 сентября 2011

Поскольку у вас есть код, это невозможно.Вы должны указать типы 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).Для этого преобразования доступны некоторые инструменты, но, к сожалению, это нужно сделать.

...