CORAB命名服务实现的简单日程管理软件

工具推荐-Colab介绍与使用方法 工具推荐-Colab介绍与使用方法 之所以能够接触到Colab,是由一位好朋友的推荐,首先得先感谢他安利了这么好的一个东西,哈哈哈!我先浅聊一下我目前对这个Colab的理解吧,我认为它就相当于一台云主机,由Google 云端硬盘作为存储地,所以首先得要有Google 云端硬盘,它可以在Google硬盘上面搭建起来,然后可以在文件夹下新建像Jupyter里面那样的notebook文件,关联Colab,可以运行代码了。 为什么说它好呐?对于我来说,我的Anaconda安装在了C盘,学习深度学习等方面的东西时,C 阅读详情

源码下载:http://download.youkuaiyun.com/detail/javacmm2012/5575805

1. CORBA准备:http://blog.youkuaiyun.com/javacmm2012/article/details/9005429


2 . 编写IDL文件,作为静态库供客户端和服务端调用,代码如下:

#ifndef IUserCfgServant_IDL_
#define IUserCfgServant_IDL_

struct  sDataTime
{
	/*日期时间类型*/
	short iYear;
	short iMonth;
	short iDay;
	short iHour;
	short iMinute;
	short iSeconds;
};

struct sItem
{
	/*用户Item数据结构*/
	short iItemId;	/*对每一个用户来说的唯一Id*/
	sDataTime sStartTime;
	sDataTime sEndTime;
	string strLabel;
};

typedef sequence<sItem> seqItem;

struct sUser
{
	short iUserId;			/*用户唯一Id*/
	string strUserName;		/*用户名*/
	string strPassword;		/*密码*/
	seqItem seqItems;		/*用户的item集合*/
	
};

interface IUserCfgServant
{
	//返回字符串
	string echoString(in string mesg);

	//加法运算
	long add(in long p1,in long p2);

	/// 用户注册
	boolean addUser( in string username, in string password );

	/// 查询用户是否存在,可用作客户端登陆与查询用户信息
	boolean queryUser( in string username, in string password, out sUser user );

	/// 更新用户信息,可用作删除Item,或者增加Item来用
	boolean updateUserInfo( in sUser user );

	
};

#endif ///<IUserCfgServant_IDL_
然后使用自定义工具tao_idl编译该文件,在VS2012配置如下:


注意:如果没有tao_idl.exe, 则转向CORBA工程编译工程名为TAO_IDL_EXE的工程,会在\ACE_wrappers\bin下生成tao_idl.exe

此后,将生成的*S.h*C.h*S.cpp*C.cpp添加到IDL工程,然后编译生成静态库IDL.lib


3. 编写服务端工程

新建个新工程,命名为Server, 新建个类CIUserCfgServant_i用于实现接口文件IDL中定义的所有方法,代码如下:

#ifndef ECHO_I_H_
#define ECHO_I_H_

#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <vector>
#include "../IDL/IUserCfgServantS.h"

//命名服务类
#include "orbsvcs/CosNamingC.h"

class CIUserCfgServant_i:public POA_IUserCfgServant,public PortableServer::RefCountServantBase
{
public:
	CIUserCfgServant_i();
	virtual ~CIUserCfgServant_i();
	
	virtual char* echoString(const char* mesg);

	//实现加法运算
	virtual CORBA::Long add(::CORBA::Long p1, ::CORBA::Long p2);

	//增加用户
	virtual CORBA::Boolean addUser (
		const char * username,
		const char * password);

	//查询用户
	virtual CORBA::Boolean queryUser (
		const char * username,
		const char * password,
		sUser_out user);

	//更新用户信息
	virtual CORBA::Boolean updateUserInfo (
		const sUser & user);

private:
	bool writeToFile();		//将对象信息存入文件
	bool readFromFile();	//读取用户信息

private:
	std::vector<sUser> m_vecUser;	//所有用户信息
	fstream m_filedata;				//文件读取用
};


#endif  ///<ECHO_I_H_

编写注册命名服务(IUserCfgServant)的代码,如下:

#include <iostream>
#include "IUserCfgServant_i.h"
using namespace std;


int main(int argc, char * argv[])
{
	try {
		//初始化CORBA
		CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);

		CORBA::Object_var poa_object =
			orb->resolve_initial_references ("RootPOA");
		PortableServer::POA_var poa =
			PortableServer::POA::_narrow (poa_object.in ());
		PortableServer::POAManager_var poa_manager =
			poa->the_POAManager ();
		poa_manager->activate ();

		CORBA::Object_var naming_context_object  = orb->resolve_initial_references("NameService");

		CosNaming::NamingContext_var naming_context = 
			CosNaming::NamingContext::_narrow (naming_context_object.in ());

		CosNaming::Name name (1);
		name.length (1);
		 name[0].id = CORBA::string_dup ("IUserCfgServant");

		 CIUserCfgServant_i* myecho = new CIUserCfgServant_i();
		 IUserCfgServant_var echo_var = myecho->_this();

		 try
		 {
			 naming_context->bind(name, echo_var.in ());
		 }
		 catch(CosNaming::NamingContext::AlreadyBound& ex)
		 {
			 cerr<< ex._info() << endl;
			 naming_context->rebind(name, echo_var.in ());
		 }

		 cout<<"server start success..."<<endl;
		 orb->run();

		 poa->destroy(1,1);
		 orb->destroy();
		
	}
	catch(CORBA::SystemException& e) {
		cerr << e._info() <<endl;
		cerr << "Caught CORBA::SystemException." << endl;
	}
	catch(CORBA::Exception& e) {
		cout<< e._info() << endl;
		cerr << "Caught CORBA::Exception." << endl;
	}
	catch(...) {
		cerr << "Caught unknown exception." << endl;
	}
	return 0;
	
}
工程配置,包含CORBA所需要的库,加上指定的静态接口库IDL.lib,配置如图:



4.编写客户端工程:

新建个工程Client, 代码如下:

#include <iostream>
#include <iomanip>
#include <sstream>

// TAO头文件
#include "tao/AnyTypeCode/AnyTypeCode_methods.h"
#include "tao/AnyTypeCode/Any.h"
#include "tao/ORB.h"
#include "tao/SystemException.h"
#include "tao/Basic_Types.h"
#include "tao/ORB_Constants.h"
#include "tao/Object.h"
#include "tao/String_Manager_T.h"
#include "tao/Objref_VarOut_T.h"
#include "tao/VarOut_T.h"
#include "tao/Versioned_Namespace.h"

#include "tao/PortableServer/PortableServer.h"
#include "tao/PortableServer/Servant_Base.h"
#include "tao/orbsvcs/Naming_Service/Naming_Service.h"
// TAO头文件

#include "../IDL/IUserCfgServantC.h"

IUserCfgServant_var _varEchoMgr;
CORBA::ORB_var _varORB;
sUser _userInfo;
bool _bIsLogin = false;


void printHelp();	//打印帮助菜单

using namespace std;

int main(int argc, char* argv[]) {
	try {
		// initialize orb
		_varORB = CORBA::ORB_init(argc, argv);

		// Obtain reference from servant IOR
		CORBA::Object_var naming_context_object = _varORB->resolve_initial_references( "NameService" );
		if ( CORBA::is_nil(naming_context_object.in()) )
			return false;

		CosNaming::NamingContext_var naming_context = CosNaming::NamingContext::_narrow( naming_context_object.in() );

		/*CosNaming::Name name(1);
		name.length(1);
		name[0].id = CORBA::string_dup( "IControlUnitDeviceServant" );*/

		CosNaming::Name name(1);
		name.length(1);
		name[0].id = CORBA::string_dup( "IUserCfgServant" );

		CORBA::Object_var project_object = naming_context->resolve( name );

		if ( CORBA::is_nil(project_object.in()) )
			return false;

		// Now downcast the object reference to the appropriate type
		_varEchoMgr = IUserCfgServant::_narrow( project_object.in() );

		while( true )
		{
// 			std::string temp;
// 			cout<<"input a string:";
// 			cin>>temp;
// 			temp = _varEchoMgr->echoString( temp.c_str() );
// 			cout<<"from server:"<<temp<<endl;
// 			int a,b;
// 			cout<<"input two integer:";
// 			cin>>a>>b;
// 			int result = _varEchoMgr->add(a,b);
// 			cout<<a<<"+"<<b<<"="<<result<<endl;
			string command;
			cin>>command;
			if( "help" == command )
			{
				printHelp();
			}
			else if( "register" == command )
			{
				string username;
				string password;
				cin>>username;	//用户名
				cin>>password;	//密码
				if( !_varEchoMgr->addUser(username.c_str(),password.c_str()))
				{
					cerr<<"username has been registered"<<endl;
				}else
				{
					cout<<"register success"<<endl;
				}
			}
			else if( "login" == command )
			{
				string username;
				string password;
				cin>>username;	//用户名
				cin>>password;	//密码
				sUser_var uservar;
				if( !_varEchoMgr->queryUser(username.c_str(),password.c_str(),uservar) )
				{
					cerr<<"invalid login"<<endl;
				}else
				{
					system("cls");
					cout<<"welcome "<<username<<endl;
					_userInfo = *uservar;
					_bIsLogin = true;
				}
			}
			else if( "add" == command )
			{
				if( _bIsLogin )
				{
					sItem item;
					//先读取开始时间
					char ch;
					cin>>item.sStartTime.iYear;
					cin>>ch;	//跳过/
					cin>>item.sStartTime.iMonth;
					cin>>ch;	//跳过/
					cin>>item.sStartTime.iDay;
					cin>>item.sStartTime.iHour;
					cin>>ch;	//跳过:
					cin>>item.sStartTime.iMinute;
					cin>>ch;	//跳过:
					cin>>item.sStartTime.iSeconds;
					//再读结束时间
					cin>>item.sEndTime.iYear;
					cin>>ch;	//跳过/
					cin>>item.sEndTime.iMonth;
					cin>>ch;	//跳过/
					cin>>item.sEndTime.iDay;
					cin>>item.sEndTime.iHour;
					cin>>ch;	//跳过:
					cin>>item.sEndTime.iMinute;
					cin>>ch;	//跳过:
					cin>>item.sEndTime.iSeconds;
					//再读Label
					string strTmp;
					cin>>strTmp;
					item.strLabel = CORBA::string_dup( strTmp.c_str() );
					int iLength = _userInfo.seqItems.length();
					if( 0==iLength )
					{
						item.iItemId = 1;
					}else
					{
						item.iItemId = _userInfo.seqItems[iLength-1].iItemId+1;
					}
					_userInfo.seqItems.length(iLength+1);
					_userInfo.seqItems[iLength] = item;
					if( _varEchoMgr->updateUserInfo(_userInfo) )
					{
						cout<<"add success"<<endl;
					}else
					{
						cout<<"add failed"<<endl;
					}
				}else 
				{
					cerr<<"please login first"<<endl;
				}
			}
			else if( "querya" == command )
			{
				if( _bIsLogin )
				{
					//查询所有的Item
					int iLength = _userInfo.seqItems.length();
					stringstream stream;
					for( int j = 0 ;j<iLength; j++)
					{
						//先输出Id;
						cout<<setw(5)<<setiosflags(ios::left)<<"itemId:"<<_userInfo.seqItems[j].iItemId<<" ";
						//输出开始时间
						stream.str("");
						stream<<
							_userInfo.seqItems[j].sStartTime.iYear<<"/"<<
							_userInfo.seqItems[j].sStartTime.iMonth<<"/"<<
							_userInfo.seqItems[j].sStartTime.iDay<<" "<<
							_userInfo.seqItems[j].sStartTime.iHour<<":"<<
							_userInfo.seqItems[j].sStartTime.iMinute<<":"<<
							_userInfo.seqItems[j].sStartTime.iSeconds;
						cout<<setw(22)<<setiosflags(ios::left)<<stream.str();
						//输出结束时间
						stream.str("");
						stream<<
							_userInfo.seqItems[j].sStartTime.iYear<<"/"<<
							_userInfo.seqItems[j].sStartTime.iMonth<<"/"<<
							_userInfo.seqItems[j].sStartTime.iDay<<" "<<
							_userInfo.seqItems[j].sStartTime.iHour<<":"<<
							_userInfo.seqItems[j].sStartTime.iMinute<<":"<<
							_userInfo.seqItems[j].sStartTime.iSeconds;
						cout<<setw(22)<<setiosflags(ios::left)<<stream.str();
						//输出label
						cout<<setw(20)<<setiosflags(ios::left)<<_userInfo.seqItems[j].strLabel.in()<<endl;
					}
				}else
				{
					cerr<<"please login first"<<endl;
				}
			}
			else if( "delete" == command )
			{
				//删除指定的ITEM
				if( !_bIsLogin )
				{
					cerr<<"please login first"<<endl;
				}
				else
				{
					int itemId;
					cin>>itemId;
					int iItemCount = _userInfo.seqItems.length();
					bool bDeleted = false;
					for( int i = 0; i<iItemCount; i++ )
					{
						if( _userInfo.seqItems[i].iItemId == itemId )
						{
							//删除改数据
							for( int j=i;(j+1)<iItemCount;j++ )
							{
								//把后面的内容往前移
								_userInfo.seqItems[j]=_userInfo.seqItems[j+1];
							}
							_userInfo.seqItems.length(iItemCount-1);//长度减少
							bDeleted = true;
							break;
						}//end of if
					}
					if( bDeleted && _varEchoMgr->updateUserInfo( _userInfo ))
					{
						//提交到服务端
						cout<<"delete success"<<endl;
					}else
					{
						cout<<"delete failed"<<endl;
					}
				}//if _bIsLogin
				
			}
			else if( "clear" == command )
			{
				if( _bIsLogin )
				{
					_userInfo.seqItems.length(0);
					if( _varEchoMgr->updateUserInfo( _userInfo ))
					{
						cerr<<"clear success"<<endl;
					}else
					{
						cerr<<"clear failed"<<endl;
					}
				}else
				{
					cerr<<"please login first"<<endl;
				}
			}
			else if( "logout" == command )
			{
				_bIsLogin = false;
				system("cls");	//清屏
			}
			else if( "exit" == command )
			{
				exit(0);
			}else
			{
				cerr<<"unkown command"<<endl;
			}
		}//while loop
	}
	catch(CORBA::SystemException&) {
		cerr << "Caught a CORBA::SystemException." << endl;
	}
	catch(CORBA::Exception& e) {
		cerr << e._info() << endl;
		cerr << "Caught CORBA::Exception." << endl;
	}
	catch(...) {
		cerr << "Caught unknown exception." << endl;
	}
	return 0;
}
void printHelp()
{
	//打印帮助菜单
	cout<<setw(15)<<setiosflags(ios::left)<<"help"<<"display help menu"<<endl;
	cout<<setw(15)<<setiosflags(ios::left)<<"register"<<"[username] [password] "<<endl;
	cout<<setw(15)<<setiosflags(ios::left)<<"login" <<"[username] [password]"<<endl;
	cout<<setw(15)<<setiosflags(ios::left)<<"add" <<"[start] [end] [title]"<<endl; 
	cout<<setw(15)<<""<<"eg:add 2012/12/13 12:12:12 2012/12/14 12:12:12 title1"<<endl;
	/*cout<<setw(15)<<"query" <<"[start] [end]"<<endl;*/
	cout<<setw(15)<<setiosflags(ios::left)<<"querya" <<"queray all items"<<endl;
	cout<<setw(15)<<setiosflags(ios::left)<<"delete" <<"[itemId]"<<endl;
	cout<<setw(15)<<setiosflags(ios::left)<<"clear" <<"clear all time"<<endl;
	cout<<setw(15)<<setiosflags(ios::left)<<"logout" <<endl;
	cout<<setw(15)<<setiosflags(ios::left)<<"exit" <<"exit the system"<<endl;
}

客户端的配置参见服务端的配置。

注意:对于在IDL中定义out参数的结构体或对象,需要在服务端或者客户端初始化,否则空指针会出现运行错误。

5. 启动命名服务

cd %TAO_ROOT%/orbsvcs/Naming_Service/
tao_cosnaming -m 0 -ORBEndpoint iiop://127.0.0.1:10000

注意:如果tao_cosnaming不存在,请编译Naming_Service工程,然后会生成该可执行文件,其中127.0.0.1:10000是目的主机的IP和端口号,这里设为本地

6. 启动服务端

Server.exe -ORBInitRef NameService=iioploc://127.0.0.1:10000/NameService

7.启动客户端

Client.exe -ORBInitRef NameService=iioploc://127.0.0.1:10000/NameService

源码下载:http://download.youkuaiyun.com/detail/javacmm2012/5575805

跟我从头学TAO编程系列 (2) -- 编写最简单的TAO应用程序 跟我从头学TAO编程系列 编写最简单的TAO应用程序 Stone Jiang 2005119@gmail.com http://www.ace-tao.org  http://www.ace-tao.org/home/link.php?url=d3d3LmFjZS10YW8ub3JnL2Jicw%3D%3D   如果您对TAO有一定了解,却不知如何驾驭它,那请跟我来从头学学TAO编 阅读详情

相关推荐

CORBA 架构体系指南(通用对象请求代理体系架构)​

什么是 CORBA 架构?概述通用对象请求代理体系架构 (CORBA) 是由对象管理组 (OMG) 定义的标准,它使以多种计算机语言编写并在多台计算机上运行的软件组件能够协同工作。CORBA 是一种跨网络分发对象的标准,以便可以远程调用对这些对象的操作。CORBA 与特定的编程语言无关,任何具有 CORBA 绑定的语言都可以用来调用和实现 CORBA 对象。对象以称为接口...

AI天才研究院 9406

CORAB?

 CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构,通用对象请求代理体系结构)是由OMG组织制订的一种标准的面向对象应用程 序体系规范。或者说 CORBA体系结构是对象管理组织(OMG)为解决分布式处理环境(DCE)中,硬件和软件系统的互连而提出的一种解决方案;OMG组织是一个国际性的非盈利组织,其职责是为应用

Veket的专栏 1488

C++ CORBA分布式计算实例教程

CORBA提供了一种标准的接口定义语言(IDL),让开发者能够定义跨语言、跨平台操作的对象接口,而无需关注底层通信的细节。CORBA的优势在于它的灵活性和互操作性,能够将复杂的分布式系统抽象化,为应用层提供了一种清晰的分布式对象交互模式。对象请求代理(Object Request Broker,ORB)是 CORBA(Common Object Request Broker Architecture)的核心组件。

weixin_29717341的博客 1269

CORAB 对 ior 文件的解析使用

String filename = "ior.txt";  org.omg.CORBA.Object obj = null; File file = new File(filename); String ior_context = readIorFile(filename);  if (ior_context == null) {         log.error("解析i

学习从来都是孤独的,但是你有责任去孤独 1738

MOSFET导通电阻Rdson全解析:物理组成、公式推导与工程选型要点

在功率电子设计中,MOSFET作为核心开关器件,其导通电阻Rdson直接决定导通损耗与系统效率。从半导体物理角度看,Rdson并非单一固定值,而是由源极电阻、沟道电阻、累积层电阻、JFET区电阻、漂移区电阻及衬底电阻等多个分量串联而成,并随栅极驱动电压、结温以及击穿电压等级发生显著变化。理解Rdson的物理来源与数学表达,有助于工程师在低压大电流与高压小电流等不同场景中合理选型、优化驱动电压并准确估算热损耗。文章从沟道电阻公式出发,深入剖析耐压与导通电阻的物理矛盾、温度系数的影响规律,并给出数据手册参数的正

weixin_29163857的博客 191

Python+Tableau 全流程数据分析实战:从数据清洗到商业洞察可视化

本文通过Python+Tableau完整演示电商销售数据分析流程。首先使用Python进行数据清洗(缺失值处理、异常值过滤等)和探索性分析(商品类别、时间趋势等),然后导入Tableau创建交互式可视化仪表盘。分析发现电子产品销售额最高但利润率低,美妆类利润率最优,东部地区销售表现最好。最终提出优化供应链、加强美妆推广等商业建议,展示了Python数据处理与Tableau可视化的高效配合。所有代码可直接运行,适合数据分析初学者和从业者实战参考。

weixin_44520581的博客 337

软件体系结构风格

一、经典软件体系结构风格 数据流风格:批处理序列;管道/过滤器 调用/返回风格:主程序/子程序;面向对象风格;层次结构 独立构件风格:进程通讯;事件系统 虚拟机风格:解释器;基于规则的系统 仓库风格:数据库系统;超文本系统;黑板系统 管道与过滤器 优点 使得软构件具有良好的隐蔽性和高内聚、低耦合的特点 允许设计者将整个系统的输入输出行为看成是多个过滤器的行为的简单合成 支持软件重用 系统...

qq_42216744的博客 2569

Xilinx ZYNQ 7000学习笔记二(FSBL代码分析启动-汇编代码)

Xilinx ZYNQ 7000学习笔记

u011116085的博客 4246

CORBA Programming with TAO - 3.IDL Data Type(数据类型与Mapping)

CORBA Programming with TAO - 3.IDL Data Type(数据类型与Mapping)摘要:简要介绍TAO支持的IDL数据类型及其C++ Mapping关系。一、简单基本数据类型(Simple Basic Types)TAO支持以下简单基本数据类型(%TAO_ROOT%/tao/Basic_Types.h):

675

保姆级教程:用Adams/Car和Simulink搞定你的第一个整车联合仿真(附模型文件)

本文提供了一份详尽的Adams/Car与Simulink联合仿真教程,涵盖从环境配置到模型导出的全流程。通过实战案例解析,帮助工程师快速掌握多体动力学仿真与控制算法开发的集成技术,特别适合汽车工程领域的初学者。文章还包含常见问题解决方案和性能优化建议,助您高效完成整车联合仿真项目。

weixin_29663861的博客 337

关于示波器测485串口波特率的使用方法总结

之前没有用过示波器,更不知道怎么来测试串口的波特率,结果遇到一客户说我们产品的波特率达不到9600,只有9100,为了验证这一说法,我们只能自己测试一下。说明:产品通过485接电脑,用串口调试助手接收都是没有问题的,用客户的设备接收就有问题。 下面说一下示波器测波特率的方法步骤: 显示高低跳变的情况: 1.先把示波器表笔的地线(夹子)夹485B,表笔夹485A。 2.往串口发送数据:如发送

lianxue1986的专栏 3万+

CORBA是什么?用途是什么?

一、什么是CORBA? CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构,通用对象请求代理体系结构)是由OMG组织制订的一种标准的面向对象应用程序体系规范。或者说 CORBA体系结构是对象管理组织(OMG)为解决分布式处理环境(DCE)中,硬件和软件系统的互连而提出的一种解决方案;OMG组织是一个国际性的非盈利组织,其职责是...

Roger_CoderLife的博客 1万+

Windows打印体系结构之Windows内置打印驱动程序

时间是一种很残酷的东西,它只会冲淡能够冲淡的,但也会洗尽铅华帮你留下该留下的。1.3.4、Windows内置打印驱动程序现在的Windows下的打印机驱动程序通常分为V4打印机驱动程序(V4 Printer Driver)、XPS打印机驱动程序(XPSDrv)、微软通用打印机驱动程序(Microsoft UniversalPrinter Driver)、微软PostScri...

weixin_34309435的博客 2253

Corba及与WebService区别

Download IIOP.NET source (includes example) - 315 Kb Download example source (without IIOP.NET) - 10 Kb Introduction In Microsoft’s vision, the next generation of distributed systems will commun...

Acettest's Blogs 4044

ReAct 智能体 Agent:架构解析与实践拓展

ReAct 智能体 Agent 凭借其推理与行动协同的独特架构,在众多人工智能应用场景中展现出巨大的潜力。从智能办公到教育辅导,从智能家居到工业物联网,ReAct 智能体通过精准推理和高效行动,为用户提供了更加智能、便捷的服务体验。然而,在实际应用过程中,仍面临工具调用安全、模型持续学习、多智能体协作管理以及性能优化等多方面的挑战。通过合理的策略和技术创新,如强化工具审核机制、构建持续学习框架、设计高效协作协议和采用性能优化手段,我们有望逐步克服这些挑战,进一步提升 ReAct 智能体的性能和可靠性。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1686

uniapp+google map不显示

uniapp+renderJS+google map开发安卓版APP非小程序,google map小叉号不显示,google map自定义marker右上角的小叉号如何去掉,uniapp+google map不显示

renkai721的专栏 525

CORBA简介

 1.CORBA:Common Object Request Broker Architecture,通用对象请求代理体系。是由对象管理组(Object ManagementGroup, OMG)制定的一种标准的面向对象分布式应用程序体系规范,旨在为异构分布式环境中,硬件和软件系统的互联而提出的一种解决方案。2.解决异构分布式系统两条主要原则:(1).寻求独立于平台的模型和抽象,这

Tony Chen的专栏 3万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

CORBA介绍

CORBA(Common Object Request Broker Architecture)通用对象请求代理体系结构:是在当今快速发展的软件与硬件资源的情况下发展出的一种新技术。它可以让分布的应用程序完成通信,无论这种应用程序是什么厂商生产的,只要符合CORBA标准就可以相互通信。CORBA1.1于1991年由OMG提出,同时还提出了接口定义语言Interface Definition Lan

鹤啸九天 5062

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

TAO教程系列之二. 简介——非常简单的服务端

2.简介——非常简单的服务端 既然我们已经知道如何实现一个简单的客户端,那么现在我们得实现一个服务端来测试它。我们必须提供Stock和Stock_Factory这两个接口的实现,并且创建可执行的应用程序把这两个接口的实现组合在一起。 实现Stock (股票)接口 为了简单起见,让我们用固定的价格来实现Stock对象。构造函数将接收所有的参数: class Quoter_Stock_i :

TAO工作室Stone Jiang的专栏 2761

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ACE Service Configurator配置动态服务

1.     导出dll制作步骤 可以参考>p25,dll制作,在此基础上,增加6和7 1)制定dll名称,例如AgentService(.dll) 2)用generate_export_file.pl AgentService 生成自定义的AgentServiceExport.h头文件 3)在dll的工程main函数所在的源文件包含所程程的AgentServiceExprot.h头文件

Mirage520的专栏 1143

TAO教程之五:实现库(Implementation Repository)

实现库(Implementation Repository) 在先前的示例中,客户端与服务端必须至少联系一次。如果服务器被移动到不同的主机或端口,或服务器已关掉,服务器与客户端之间的绑就定会失败。通过外在的定位代理间接绑定,像实现仓库可以解决上述问题。 实现仓库维护一个数据结构,这个数据结构作为保存跟踪服务器的服务表。它维护已知服务的注册表、正在运行的服务器的记录和对应的端口号,并且如果服务器

TAO工作室Stone Jiang的专栏 2215

TAO教程之六:TAO的命名服务

TAO的命名服务 迄今为止我们是用的string_to_object() 和object_to_string() 来引导客户端启动的。如果系统要用于真正的分布式环境,我们就不能依靠共享分件系统或让用户输入IOR来初始化客户端了。为了达到这个目的,CORBA提供了几种定位服务。其中最简单的服务是CORBA命名服务。有许多好的教程讲述了如何使用命名服务,另外在Henning 的Vinoski 的书中

TAO工作室Stone Jiang的专栏 3228

TAO编译总结

(一)TAO编译过程tao编译过程:1设置ACE1.1 解压缩安装包,比如解压缩到E:/cs/ACE_TAO/1.2 设置环境变量ACE_ROOT = E:/cs/ACE_TAO/ACE_wrappers/1.3 在ACE_ROOT/ace下添加一个文件 config.h,在文件内添加如下内容:    #define ACE_HAS_STANDARD_CPP_LIB

fys2xxx的专栏 3834

CORBA基本概念、函数

摘要: 简要介绍CORBA规范定义的几个常用基本方法的功能及应用中需要注意的问题。 正文: idl编译器会为每个在idl中声明的interface生成一个对应的代理基类: class InterfaceName; 以及两个对象引用类型: InterfaceName_ptr 和 InterfaceName_var 前者是一个指针类型,其定义往往是

u012719556的专栏 4183
上一篇: 跟我从头学TAO编程(1)--获取并编译TAO
下一篇: read()函数简介
静水若流深
博客等级 码龄14年 5粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值