命名服務基本與上面的<<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