BCB中Corba Name Service使用方法
由于在尝试用BCB 4访问NameService时,遇到了一些奇奇怪怪的问题,而Visibroker所带的例子却可以用bcc32正常编译运行,俺决定从头做一个程序看看问题出在哪里。折腾了一夜,结论是做服务器还是不用Corba Server wizard好。(我还是不明白为什么?) 1、File| New, Multitier,Corba IDL File:
存为order.idl 2、File|New, Consol Wizard,生成一个无vcl支持的consol应用。 3、Project|Add to project,选上刚写的order.idl,Project | Compile之。 4、File|New, Miltitier, Corba Object Implementation,IDL选刚写的order.idl,Interface选Order,为简明起见,其它的名字就不改了。确定,自动生成OrderServer.cpp。 5、在OrderServer.cpp中找到char* OrderImpl::Name(),在其函数体中写: return "Hi, I am Test CorbaServer"; 6、File | Save All,Unit1.cpp存为tcnServer.cpp,Project存为tcnServer.bpr。然后Make之。一个简单的Corba Server就做好了。 7、测试运行一下,然后在MS-Dos方式下运行osfind.exe(应该在path里,否则到$(VBroker)\bin里找),这时会显示一系列的corba信息:
8、确定无误后,回到IDE中,打开tcnServer.CPP,在#include的最后部分加上: #include "CosNaming_c.hh" 然后,Project | Add To Project,将$(VBroker)\lib\name_br.lib加到工程中,这时tcnServer.CPP的顶部分出现USELIB("..\..\..\vbroker\lib\name_br.lib"); 一行代码。其中的path与你的Visibroker安装目录及工程的保存位置都有关,以你的BCB生成的代码为准。 9、boa->obj_is_ready(&order_OrderObject);一句(如无意外应为26行),在这一行和下边的注释// Wait for incoming requests之间加上以下代码段,完成NamingContext建立、Name建立、Name绑定的工作: //获取由命令行参数传入的NameComponent const char* id = argv[1]; const char* kind = argv[2]; //取得默认的NamingContext对象 CosNaming::NamingContext_var context = CosNaming::NamingContext::_bind(); //生成一个Name对象 CosNaming::Name name; //设定Name中只包含1个{id,kind}的NameComponet name.length(1); name[0].id = id; name[0].kind = kind; //将该名字绑定给程序中建立的对象实例order_OrderObject context->bind(name, &order_OrderObject); //在consol上输出已经绑定的名字。 cout << "The object is bound: \"" << name[0].id << "\" \"" << name[0].kind << "\"" << endl; 10、File | Save All,Project | Make之。 11、测试运行:进入MS-DOS方式, start nameextf MyTester test.log //启动NamingContext Factory start tcnServer MyName MyKind //启动服务器,指定其名字为{MyName, MyKind} 再用osfind查看就会发 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |