給定兩個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