赞
踩
转载请注明原创地址:http://blog.csdn.net/iflychenyang/article/details/8900263
1.首先当然是下载和安装
http://www.zeroc.com/download.html
分别下载了Ice-3.4.2.msi ,IceVisualStudioAddin-3.4.2.1.msi 和Ice-3.4.2-ThirdParty.msi
依次进行了安装;
2.配置环境变量,这个时候文件被安装到了C:\Program Files\ZeroC\Ice-3.4.2\目录下,就是在我的电脑中配置环境变量,
计算机->属性->高级系统设置->环境变量->系统变量->Path中进行添加“;C:\Program Files\ZeroC\Ice-3.4.2\bin\vc100”
这个时候应该就可以在命令行环境下进行测试了
slice2cpp -v
得到的结果应该是
3.4.2
3.新建项目
client和server,如下图所示
4.配置工程依赖项
点击状态栏:Tools->Ice Configuration...,选择Enale Ice Builder,如下图所示:
我们接下来讲的一些都是配置好ICE的基础上实现的。
- module Demo{
- interface Printer{
- void printString(string s);
- };
- };
6.编译此ice文件,我采用的办法是到对应的目录下,使用命令行来进行编译,编译命令也就是slice2cpp Printer.ice;经过编译,我们得到两个文件Printer.h和Printer.cpp,将这两个文件作为现有项添加到Server项目中,
7.添加一个新的Server.cpp文件,内容是参照Ice 3.4.2的设计文档得到的:
- #include <Ice/Ice.h>
- #include "Printer.h"
- #include <iostream>
-
- using namespace std;
- using namespace Demo;
-
- class PrinterI : public Printer
- {
- public:
- virtual void printString(const string &s, const Ice::Current &);
- };
-
- void PrinterI ::printString(const string & s, const Ice::Current &)
- {
- cout<<s<<endl;
- }
-
- int main(int argc, char * argv[])
- {
- int status = 0;
- Ice::CommunicatorPtr ic;
- try
- {
- ic = Ice::initialize(argc,argv);
- Ice::ObjectAdapterPtr adapter
- = ic->createObjectAdapterWithEndpoints("SimplePrinterAdapter","default -p 10000");
- Ice::ObjectPtr object = new PrinterI;
- adapter->add(object,ic->stringToIdentity("SimplePrinter"));
- adapter->activate();
- ic->waitForShutdown();
- }catch (const Ice::Exception & e)
- {
- cerr<<e<<endl;
- status = 1;
- }
- catch (const char * msg)
- {
- cerr<<msg<<endl;
- status = 1;
- }
- if(ic){
- try{
- ic->destroy();
- }
- catch(const Ice::Exception & e)
- {
- cerr<<e<<endl;
- status = 1;
- }
- }
- return status;
- }
8.这里有个小问题需要注意一下,就是原文中使用的是"#include<Printer.h>",应该改用双引号#include"Printer.h",原因可能是<>到系统指定的一些目录中查找文件,但是“”找的范围更大些。
9.编译此项目,我在第一次编译的时候出了很多问题,原因就是忘了添加附加依赖项,也就出了很多链接无法解析的问题,将iced.lib和iceutild.lib添加进去后,就没有了这些问题。- #include<Ice/Ice.h>
- #include "Printer.h"
- #include <iostream>
- #include <string>
-
- using namespace std;
- using namespace Demo;
-
- int main(int argc, char * argv[])
- {
- int status = 0;
- Ice::CommunicatorPtr ic;
- try{
- ic = Ice::initialize(argc,argv);
- Ice::ObjectPrx base = ic->stringToProxy("SimplePrinter:default -p 10000");
- PrinterPrx printer = PrinterPrx::checkedCast(base);
- if(!printer)
- throw "invalid proxy";
- printer->printString("Hello World!");
- }
- catch(const Ice::Exception& ex)
- {
- cerr<<ex<<endl;
- status = 1;
- }
- catch (const char* msg)
- {
- cerr<<msg<<endl;
- status = 1;
- }
- if(ic)
- ic->destroy();
- return status;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。