VS2003配置和编写第一个ICE程序

本文详细记录了在VS2003中配置ICE环境并编写第一个ICE程序的完整步骤,包括下载安装ICE相关软件、设置环境变量、在VS2003中创建和配置项目,以及解决遇到的问题。通过此过程,读者可以学习到如何在Windows环境下搭建ICE开发环境,并实现简单的客户端-服务器通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过痛苦的三天奋斗,终于成功见到了“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

 
 

内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项误差源分析,旨在帮助工程师更好地理解应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收泄漏电流等因素对测量准确性的影响。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值