转载请注明原创地址:http://blog.csdn.net/iflychenyang/article/details/8900263
VS2010配置ICE3.4.2
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,如下图所示:
Hello World~
我们接下来讲的一些都是配置好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; }