命名服务基本与上面的<<Cobra-omniORB简单编程-IOR>>类似,下面具体对须要的操做步骤进行描述。ios
1、设置环境变量编程
1)、在“D:/omniORB-4.1.1/”目录下新建目录Omninames;app
2)、设置用户环境变量“OMNINAMES_LOGDIR = D:/omniORB-4.1.1/Omninames”。测试
2、配置命名服务spa
执行D:/omniORB-4.1.1/sample.reg注册文件,.net
在HKEY_LOCAL_MACHINE/SOFTWARE/omniORB/InitRef 加入类型为字符串键“1”,键值为"NameService=corbaname::my.host.name"(这里的my.host.name 是你的机器名)server
若是使用本机来测试,键值能够为NameService=corbaname::127.0.0.1。blog
3、使用上述testOrbServer工程文件,修改testOrbServer.cpp代码:ip
4、使用上述testOrbClinet工程文件,修改testOrbClinet.cpp代码:ci
- #include <iostream>
-
- #include "time.h"
- using namespace std;
-
- int main(int argc,char* argv[])
- {
-
- CORBA::ORB_var orb;
- try
- {
- if (argc != 2)
- {
- throw 0;
- }
-
-
- orb = CORBA::ORB_init(argc, argv);
-
-
- CORBA::Object_var rootContextObj = orb->resolve_initial_references("NameService");
- if (CORBA::is_nil(rootContextObj))
- {
- cerr << "Nil Time Reference" << endl;
- throw 0;
- }
- CosNaming::NamingContext_var nc =
- CosNaming::NamingContext::_narrow(rootContextObj.in());
-
-
- CosNaming::Name name;
- name.length(1);
- name[0].id = (const char *)"FirstTimeService";
- name[0].kind = (const char *)"";
-
- CORBA::Object_var managerObj = nc->resolve(name);
-
- ::Time_var manager = ::Time::_narrow(managerObj.in());
-
- if (CORBA::is_nil(manager))
- {
- cerr << "Nil Time Reference" << endl;
- throw 0;
- }
- cout << "OK, Let's have a look: " << manager->get_gmt() << endl;
- }
- catch (const CORBA::Exception& e)
- {
- cerr << "Client.main() Exception " << e._name() << endl;
- return 1;
- }
- return 0;
- }
5、编译上述两个工程
6、启动命名服务
打开一个命令窗口,输入omniNames –start (请不要关闭该窗口,若是不幸把这个窗口关闭了,那就从新输入omniNames就好了,不用带参数了。也就是说只有第一次用omniNames时才用-start,第二次之后就不用了,由于log文件已经存在了。)。
6、运行testOrbServer.exe服务端程序

7、运行testOrbClient.exe客户端程序

转自:https://blog.csdn.net/liuxuezong/article/details/7232132