С учетом двух определений IDL: (Я только реализую клиент, серверная сторона исправлена.)
// Version 1.2
module Server {
interface IObject {
void Foo1();
void Foo2() raises(EFail);
string Foo3();
// ...
}
};
// Version 2.3
module Server {
interface IObject {
// no longer available: void Foo1();
void Foo2(string x) raises(ENotFound, EFail); // incompatible change
wstring Foo3();
// ...
}
};
( Редактировать Примечание: добавлен метод Foo3, который не может быть перегружен из-за изменения типа возвращаемого значения.)
Возможно ли как-то скомпилировать оба файла-заглушки в одном клиентском приложении C ++ CORBA?
Используя значения по умолчанию компилятора IDL, два приведенных выше определения IDL приведут к заглушке кода, которая не может быть скомпилирована в один и тот же модуль C ++, поскольку вы получите несколько ошибок определения от компоновщика. Однако клиент должен иметь возможность общаться с обеими версиями сервера.
Каковы возможные решения?
(Примечание: мы используем omniORB )