【发布时间】:2011-03-03 07:55:49
【问题描述】:
给定两个 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)
【问题讨论】:
标签: c++ compatibility corba