VS2003配置和编写第一个ICE程序
2007-07-29 02:32
357 查看
经过痛苦的三天奋斗,终于成功见到了“HELLO,WORLD!”,鉴于网上的文章基本每篇都有BUG,致使我们落入陷阱,浪费大好时间,所以把我的所有步骤和示例代码一一描述,但愿后来者能少走弯路。
以下步骤没多做解释是因为本人也是初学,尚未入门
一、下载
Ice-3.2.0-VC71.msi: http://www.zeroc.com/download/Ice/3.2/Ice-3.2.0-VC71.msi
Ice-3.2.0-ThirdParty-VC71.msi: http://www.zeroc.com/download/Ice/3.2/Ice-3.2.0-ThirdParty-VC71.msi
二、安装
1、Ice-3.2.0-VC71.msi 安装到c:/Ice-3.2.0-VC71
2、Ice-3.2.0-ThirdParty-VC71.msi到C:/Ice-3.2.0-VC71/ThirdParty
3、在OS系统环境变量中添加ICEROOT,指向c:/Ice-3.2.0-VC71
4、在OS系统环境变量path添加“%ICEROOT%/bin;”、“%ICEROOT%/lib;”、“%ICEROOT%/ThirdParty/bin;”、“%ICEROOT%/ThirdParty/lib”;
二、设置
1、打开VS2003,
“工具”/“选项”/“项目”/“VC++目录”
选择“可执行文件”: 增加“$(ICEROOT)/ThirdParty/bin”、“$(ICEROOT)/bin”
选择“包含文件”: 增加“$(ICEROOT)/include”、“$(ICEROOT)/ThirdParty/include”
选择“库文件”: 增加“$(ICEROOT)/ThirdParty/lib”、“$(ICEROOT)/lib”
三、示例程序
1、新建ICEDEMO空白解决方案
2、在方案中添加新建Visual C++项目Slice,选择Win32静态库空白项目。
3、命令行中敲入notepad Printer.ice(必须是.ice),
4、文件printer.ice内容如下:
注意分号:
module demo
{
interface Printer
{
void printString(string s);
};
};
保存在目录/slice下。
5、用命令行程序编译printer.ice:slice2cpp printer.ice,生成Printer.h、Printer.cpp两个文件
6、将pritner.h、printer.cpp加入Slice工程
注意: 7、修改Printer.cpp中的第一行“#include <printer.h>”为“#include "printer.h"”
8、设置Slice项目属性还需要进行如下设置:
C/C++选项卡/代码生成/运行时库/“多线程调试DLL(/MDd)”;
C/C++选项卡/语言/启用运行时类型信息/“是(/GR)”;
注意:MD表示RELEASE,MDD表示DEBUG
9、新建一个Visual C++项目Server,选择Win32控制台空白项目
10、在项目server中添加引用项目Slice
11、在项目server中添加空白CPP文件Server.cpp:
#include "../Slice/Printer.h"
#include <Ice/Application.h>
#include <Ice/Ice.h>
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->add(object,ICE::stringToIdentity("SimplePrinter"));您就死翘翘了
//就这个问题缠了我3天,后来发现官方文档是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;
}
12、项目属性设置:
C/C++/代码生成/运行时库/“多线程调试DLL(/MDd)”;
链接器/输入/附加依赖项/“Iced.lib IceUtild.lib”;
13、添加新建Visual C++项目Client,选择Win32控制台空白项目
14、在项目Client中添加引用项目Slice
15、在项目Client中添加空白CPP文件client.cpp:
#include <Ice/Ice.h>
#include "../Slice/Printer.h"
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;
}
16、项目属性设置:
C/C++/代码生成/运行时库/“多线程调试DLL(/MDd)”;
链接器/输入/附加依赖项/“Iced.lib IceUtild.lib”;
17、编译、连接
18、先运行server.exe,然后运行client.exe,client.exe一晃而过,然后server.exe打印出hello world。
19、路漫漫其修远兮,good luck
以下步骤没多做解释是因为本人也是初学,尚未入门
一、下载
Ice-3.2.0-VC71.msi: http://www.zeroc.com/download/Ice/3.2/Ice-3.2.0-VC71.msi
Ice-3.2.0-ThirdParty-VC71.msi: http://www.zeroc.com/download/Ice/3.2/Ice-3.2.0-ThirdParty-VC71.msi
二、安装
1、Ice-3.2.0-VC71.msi 安装到c:/Ice-3.2.0-VC71
2、Ice-3.2.0-ThirdParty-VC71.msi到C:/Ice-3.2.0-VC71/ThirdParty
3、在OS系统环境变量中添加ICEROOT,指向c:/Ice-3.2.0-VC71
4、在OS系统环境变量path添加“%ICEROOT%/bin;”、“%ICEROOT%/lib;”、“%ICEROOT%/ThirdParty/bin;”、“%ICEROOT%/ThirdParty/lib”;
二、设置
1、打开VS2003,
“工具”/“选项”/“项目”/“VC++目录”
选择“可执行文件”: 增加“$(ICEROOT)/ThirdParty/bin”、“$(ICEROOT)/bin”
选择“包含文件”: 增加“$(ICEROOT)/include”、“$(ICEROOT)/ThirdParty/include”
选择“库文件”: 增加“$(ICEROOT)/ThirdParty/lib”、“$(ICEROOT)/lib”
三、示例程序
1、新建ICEDEMO空白解决方案
2、在方案中添加新建Visual C++项目Slice,选择Win32静态库空白项目。
3、命令行中敲入notepad Printer.ice(必须是.ice),
4、文件printer.ice内容如下:
注意分号:
module demo
{
interface Printer
{
void printString(string s);
};
};
保存在目录/slice下。
5、用命令行程序编译printer.ice:slice2cpp printer.ice,生成Printer.h、Printer.cpp两个文件
6、将pritner.h、printer.cpp加入Slice工程
注意: 7、修改Printer.cpp中的第一行“#include <printer.h>”为“#include "printer.h"”
8、设置Slice项目属性还需要进行如下设置:
C/C++选项卡/代码生成/运行时库/“多线程调试DLL(/MDd)”;
C/C++选项卡/语言/启用运行时类型信息/“是(/GR)”;
注意:MD表示RELEASE,MDD表示DEBUG
9、新建一个Visual C++项目Server,选择Win32控制台空白项目
10、在项目server中添加引用项目Slice
11、在项目server中添加空白CPP文件Server.cpp:
#include "../Slice/Printer.h"
#include <Ice/Application.h>
#include <Ice/Ice.h>
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->add(object,ICE::stringToIdentity("SimplePrinter"));您就死翘翘了
//就这个问题缠了我3天,后来发现官方文档是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;
}
12、项目属性设置:
C/C++/代码生成/运行时库/“多线程调试DLL(/MDd)”;
链接器/输入/附加依赖项/“Iced.lib IceUtild.lib”;
13、添加新建Visual C++项目Client,选择Win32控制台空白项目
14、在项目Client中添加引用项目Slice
15、在项目Client中添加空白CPP文件client.cpp:
#include <Ice/Ice.h>
#include "../Slice/Printer.h"
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;
}
16、项目属性设置:
C/C++/代码生成/运行时库/“多线程调试DLL(/MDd)”;
链接器/输入/附加依赖项/“Iced.lib IceUtild.lib”;
17、编译、连接
18、先运行server.exe,然后运行client.exe,client.exe一晃而过,然后server.exe打印出hello world。
19、路漫漫其修远兮,good luck
相关文章推荐
- VS2005配置和编写第一个ICE程序
- VS下ICE具体配置,及第一个ICE程序详解
- 编写第一个ice程序
- VS下ICE具体配置,及第一个ICE程序详解
- 【菜鸟入门】安装配置eclipse 并编写运行第一个Java程序
- 【安装eclipse, 配置java环境教程】 编写第一个java程序
- 【JAVA初学者】配置JDK的详细过程,以及第一个JAVA程序的编写。
- 【安装eclipse, 配置java环境教程】 编写第一个java程序
- 【安装eclipse, 配置java环境教程】 编写第一个java程序
- 配置使用libevent库——使用libevent编写第一个程序
- Java入门-第一节-jdk的安装,环境变量的配置及第一个程序的编写。
- 配置java开发环境及使用记事本编写第一个最简单的java程序
- MyEclipse配置Tomcat 并编写第一个JSP程序
- VC6.0配置汇编环境并编写第一个Hello World程序
- MyEclipse配置Tomcat 并编写第一个JSP程序
- 【安装eclipse, 配置java环境教程】 编写第一个java程序
- OpenCV学习笔记(01)我的第一个OpenCV程序(环境配置)
- OpenCV学习笔记(一)——安装配置、第一个程序
- .NET 学习笔记(二)——用vs编写的第一个程序
- 第一个驱动程序环境配置,编写与调试(2)