给定两个IDL的定义:(我只实现客户端,服务器端是固定的。)在同一个应用程序/模块中使用不同的不兼容版本的CORBA接口?
// 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)
“分开的库”是指单独的DLL? – 2011-03-03 16:21:25
是的,否则你遇到你已经提到的相同的编译/链接问题。当然,您必须将正确的IDL编译到每个DLL中。 – jopa 2011-03-03 17:50:04