因工作需要学习了ICE,先将简单的一个计算加法和减法的小程序和大家分享一下:(程序写的很傻很傻)
(1)安装和配置ICE
首先下载ICE安装包,我下载的是http://www.zeroc.com/download.html,Ice-3.4.2.msi
安装完毕后,配置环境变量,(我的电脑右键->属性->高级->环境变量,将你的安装目录加入如:C:/Programs file/Zeroc/Ice-3.4.2/bin)。
设置完后,打开cmd,输入slice2cpp看看是不是有命令提示,如果有说明正确,如果没有次命令可能是环境变量配置错误,仔细检查一下。
(2)打开VS2008,建立新工程Server,新增.ice文件。(如果此时还没有的话,选择Tools->Add-in Manger,选中Ice-3.4.2 visual studio add-in 和visual Assiant X。)编写Caculator.ice
module MCal
{
interface Cal
{
int add(int num1,int num2);
int sub(int num1,int num2);
};
};
(3)编译Caculator.ice会生成Caculator.h 和Cacultor.cpp两个文件。
编译方法一:打开cmd,输入slice2cpp Caculator.ice的路径 ,如slice2cpp D:\TestIce\TestIce\Caculator.ice。或许在你建立的工程中找不到这两个文件,搜寻一下,看看在哪,然后将这两个文件放在Caculator.ice的目录下。
编译方法二:用vs2008编译,编译前需要进行下设置。选择Tools->External Tools,Add如下:
然后设置Caculator的属性,Custom Build Step->General,设置如下:
那么就可以编译Caculator.ice文件啦。
(4)编译译成功后,建立服务器端CaculatorServer.cpp,type.h
CaculatorServer.cpp:
#include<Ice/Ice.h>
#include<Ice/Application.h>
#include<iostream>
#include"type.h"
using namespace std;
CalI::CalI()
{
num1d=0;
num2d=0;
}
CalI::~CalI()
{
}
int CalI::add(int num1, int num2, const Ice::Current &)
{
int sumv=0;
sumv=num1+num2;
return sumv;
}
int CalI::sub(int num1,int num2,const Ice::Current&)
{
int difv=0;
if (num1>num2)
{
difv=num1-num2;
return difv;
}
else
{
cout<<"there is some wrong!"<<endl;
return 0;
}
}
class CalApp:virtual public Ice::Application
{
public:
virtual int run(int,char *[]);
};
int CalApp::run(int,char *[])
{
//shutdownOnInterrupt();
Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapterWithEndpoints(
"Caladapter","default -p 10000");
Ice::ObjectPtr object = new CalI();
adapter->add(object,communicator()->stringToIdentity("Cal"));
adapter->activate();
communicator()->waitForShutdown();
if(interrupted())
cerr << appName() << ":recv signal,shutting down" << endl;
return 0;
}
int main(int argc,char* argv[])
{
CalApp app;
return app.main(argc,argv);
}
type.h
#ifndef _TYPE_H
#define _TYPE_H
using namespace std;
using namespace MCal;
class CalI:public Cal
{
public:
CalI();
~CalI();
virtual int add(int num1,int num2,const Ice::Current&);
virtual int sub(int num1,int num2,const Ice::Current&);
private:
int num1d;
int num2d;
};
#endif
编译成功,如果有很多错误,可能是没有加入库文件iced.lib和iceutild.lib
如果成功,服务器端建立成功。
(4)重新建立工程,Client,建立客户端CalculatorClient.cpp
将生成的Calculator.h 和Calculator.cpp加入Client工程中,然后建立CalculatorClient.cpp
#include <Ice/Ice.h>
#include <Ice/Application.h>
#include "Calculator.h"
#include<iostream>
using namespace std;
using namespace MCal;
//#define RC_List "/home/tester/Key_Checking/ATT_RC/RMT_B109P_EU_Set.txt"
//#define RC_Data "/home/tester/Key_Checking/ATT_RC/RMT_B109P_EU_Set.dat"
class MyApp : virtual public Ice::Application
{
public:
virtual int run(int,char*[]);
};
int MyApp::run(int,char*[])
{
Ice::ObjectPrx base = communicator()->stringToProxy("Cal:default -p 10000");
CalPrx calculator = CalPrx::checkedCast(base);
if(!calculator)
throw "Invalid proxy!";
cout<<calculator->add(1,2)<<endl;
cout<<calculator->sub(56,12)<<endl;
//Calc->Close();
return 0;
}
int main(int argc,char* argv[])
{
MyApp app;
return app.main(argc,argv);
}