в CORBA розуміється класичний масив - набір даних однотипних елементів, розмір якого відомий заздалегідь і не може бути змінений. Якщо вам потрібні масиви змінної довжини, то потрібно використовувати так звані В«послідовностіВ». Синтаксис визначення масиву: long MyLongArray [10] [20];
Для масивів використання typedef обов'язково.
Масиви IDL дуже схожі на рядки IDL тим, що компілятор idl2cpp перетворює їх у звичайні масиви C + +. Як і для рядків, для масивів генеруються допоміжні класи-оболонки - _var-і _out, а також функції створення динамічних масивів - імя_массіва_alloc () і імя_массіва_free (). Обидві вони не мають аргументів - розмір масиву відомий на стадії компіляції IDL-файлу. p align="justify"> Обробка помилок
Обробка помилок - один з найважливіших аспектів будь-якої технології програмування. Всі сучасні системи та мови використовують варіанти однієї моделі, яка називається В«обробка виняткових ситуацій із завершеннямВ». З нею добре знайомі програмісти на C + +, Java або Delphi. До речі, термін В«із завершеннямВ» в її назві не означає, що програма буде завершена - просто в загальному випадку продовжити виконання з тієї точки, де була збуджена виняткова ситуація, неможливо. p align="justify"> Мова IDL дозволяє програмісту визначити свої типи виняткових ситуацій і оголосити, що той чи інший метод збуджує деякі з них:
exception MyException_1 {}; MyException_2
{code; description;
}; MyInterface
{MyMethod_1 (); MyMethod_2 () raises (MyException_1); MyMethod_1 () raises (MyExcpetion_1, MyException_2);
};
При відображенні на C + + все відбувається досить природнім чином. Для винятків генеруються окремі класи, і ви просто В«відловлюєВ» відповідний тип виключення в операторі catch. p align="justify"> Втім, у системи обробки помилок CORBA є один серйозний недолік - в ній не підтримується спадкування винятків. Іншими словами, всі ваші винятку абсолютно не залежать один від одного. Нічого не поробиш - CORBA готова підтримувати мови без вбудованої системи обробки винятків. p align="justify"> Крім винятків, визначених користувачем, в CORBA існує близько тридцяти так званих В«системних винятківВ». Ви не повинні включити жодне з них у raises-список вашого методу, та в цьому й немає необхідності - вважається, що будь-який віддалений метод здатний порушувати будь-які системні виняткові ситуації. p align="justify"> Системні винятку мають одну дуже цікаву особливість - вони в якості поля містять ознака того, чи відбулося виключення ДО виконання яких-небудь дій на стороні сервера, або воно сталося вже ПІСЛЯ.
При відображенні на C + + всі класи виключень користувача є похідними від стандартного класу CORBA :: UserException, а всі системні - від CORBA :: SystemException, так що ви можете трохи системати...