下载ICE源代码后,解压至C盘,直接双击打开all.dsw,然后遵照vs.net IDE的提示,把所有项目文件转换为.net下的solution及vcproj文件。然后build->build solution。
至此一切如常,然后在编译到ICE这个项目时,到了router.cpp文件时报错,错误显示如下:
c:/Ice-2.1.0/src/Ice/Router.cpp(408): error C2059: syntax error : '.'
......
仔细检查,没发现什么大碍,ice源程序的c++语法肯定没问题,该引用的头文件也都有了。
于是找到第一个报错的地方,把该方法以后的所有代码全部注释掉,该方法之类的其余代码也尽可能注释。出错处代码如下:
::IceInternal::Outgoing __out( __connection.get(), __reference.get(), __operation, static_cast< ::Ice:: OperationMode >(1), __context, __compress );
bool __ok =__out.invoke();
在第二句调用__out.invoke()时编译报错,注释此句后再编译一切正常。
尝试把__out改为_out,调用_out.invoke()一切正常,于是开始怀疑是此变量名有问题。改为__out1也正常。
因为__out是在一个方法之内定义的,即是一个局部变量,那么即使与全局变量或是该类里的实例或类变量重名,也不会受影响。google搜索__out, 发现有类似#define __out的语句存在,豁然开朗,应该是有宏与__out重名,打开vc.net的tools->options->projects->vc++ directories观察include files把几个怀疑对象去掉,重新编译,全部通过。最终确定有问题的include files目录为C:/Program Files/Microsoft Platform SDK for Windows XP SP2/Include/