还请大家帮帮忙,Corba中有关回调的问题!

baozhi 2009-12-13 11:55:47
服务器采用了Java编写 客户机采用了bds 2009开发!~idl结构如下:
module ttt{
intreface callback{
void event(in long msg);
};


intreface test{
void registry(in callback cb);
}
}

服务器通过registry方法拿到客户端的callback对像,并可操作这个对像来实现回调。
现在的问题是在客户端我要如何来实现这个方法呢?是不是得要把这个IDL在客户端也要编译出服务器头文件(桩文件)
然后写一个类来继承如:
class TCallBack : public POA_ttt::callback,public virtual PortableServer_ServantBase

但其它的要怎么写就没有头绪了!还请大家帮帮忙!
...全文
126 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
林临工作室 2010-08-21
  • 打赏
  • 举报
回复
在server端写函数的实现,在客户端写调用函数,通过poa去获取服务端的对象
baozhi 2009-12-19
  • 打赏
  • 举报
回复
没有人在bds2009下使用过Corba吗?
baozhi 2009-12-13
  • 打赏
  • 举报
回复
客户机代码如下:
ry{
orb = CORBA::ORB_init(__argc, __argv);
}catch(...){}
CORBA::Object_var obj;
try{
obj = orb->resolve_initial_references("RootPOA");
}catch(...){

}
t_object = orb->string_to_object(IOR);
SDMObjects = SDMGetObjects::SDMObjects::_narrow(t_object);

bc = new TEventCallBack();//回调接口


PortableServer::POA_var rootpoa = PortableServer::POA::_narrow(obj);
rootpoa->the_POAManager()->activate();

PortableServer::ObjectId_var cb = rootpoa->activate_object(bc);



CORBA::Object_var ref = rootpoa->servant_to_reference(bc);
//CiaoCallback cref = CiaoCallbackHelper.narrow(ref);
UDMSystem::CallBack* cref= UDMSystem::CallBack::_narrow(ref);




UDMSystem::UDMFileManager_var udmf = SDMObjects->UDMFileManager();//得到服务器接口

udmf->RegisterClassBack(cref);//注册回调
baozhi 2009-12-13
  • 打赏
  • 举报
回复
我再补充一下:
后面又查了些资料,说是在客户机得使用POA,于是写了如下代码:
try{
orb = CORBA::ORB_init(__argc, __argv);
}catch(...){}
CORBA::Object_var obj;
try{
obj = orb->resolve_initial_references("RootPOA");
}catch(...){}

开发环境是:bcb 2009 VisiBroker 4.5
结果obj = orb->resolve_initial_references("RootPOA"); 这句时出个异常:CORBA_BAD_PARAM

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧