Тип последовательности OpenDDS IDL

Я пытаюсь опубликовать видеокадры, используя следующий IDL:

typedef sequence<octet> Pixels;
module message {
   @topic
   struct Image {
      int width;
      int height;
      int bytesPerPixel;
      Pixels  data;
};

Я также хотел бы отправить 2 последовательности данных изображения (скажем, необработанные и отфильтрованные). Вместо объявления Pixels data2 можно ли упорядочить контейнер, объявленный как массив? typedef sequence<octet> Pixels[2] выдает ошибки.


person nkumar3119    schedule 06.10.2020    source источник
comment
int не является допустимым типом IDL. Целочисленные типы: short (16 бит), long (32 бита), long long (64 бита) и unsigned версии этих трех.   -  person Fred Hornsey    schedule 07.10.2020
comment
После преобразования ints в unsigned shorts и добавления отсутствующей скобки IDL принимается компиляторами IDL. Какие ошибки вы получаете?   -  person Fred Hornsey    schedule 07.10.2020


Ответы (1)


Итак, я передал этот IDL opendds_idl:

typedef sequence<octet> Pixels[2];
module message {
  @topic
  struct Image {
    unsigned short width;
    unsigned short height;
    unsigned short bytesPerPixel;
    Pixels data;
  };
};

и он принял это:

opendds_idl --syntax-only test.idl                                                    
processing test.idl

Тем не менее, я решил попробовать создать с ним библиотеку на случай, если сгенерированный код окажется неверным, что, похоже, правда.

testTypeSupportImpl.cpp: In function ‘bool OpenDDS::DCPS::gen_skip_over(OpenDDS::DCPS::Serializer&, Pixels_forany*)’:
testTypeSupportImpl.cpp:83:41: error: ‘sequence’ does not name a type; did you mean ‘servent’?
     if (!gen_skip_over(ser, static_cast<sequence*>(0))) return false;

С последующими другими ошибками. Кажется, мы не поддерживаем попытки определить тип массива и последовательности одновременно. Замена typedef двумя работами:

typedef sequence<octet> PixelSeq;
typedef PixelSeq Pixels[2];
person Fred Hornsey    schedule 06.10.2020
comment
Сообщил об этом восходящем потоке, см. github.com/objectcomputing/OpenDDS/issues/1931 - person Johnny Willemsen; 07.10.2020
comment
Точно, это ошибка, которую я получал при создании библиотеки. Спасибо, теперь работает! - person nkumar3119; 07.10.2020