﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Jiang's C++ Space</title><link>http://www.cppblog.com/guogangj/</link><description>创作，也是一种学习的过程。</description><language>zh-cn</language><lastBuildDate>Sat, 04 Apr 2026 04:25:59 GMT</lastBuildDate><pubDate>Sat, 04 Apr 2026 04:25:59 GMT</pubDate><ttl>60</ttl><item><title>用VS2010发布ASP.net网站</title><link>http://www.cppblog.com/guogangj/archive/2011/09/13/155703.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Tue, 13 Sep 2011 14:11:00 GMT</pubDate><guid>http://www.cppblog.com/guogangj/archive/2011/09/13/155703.html</guid><wfw:comment>http://www.cppblog.com/guogangj/comments/155703.html</wfw:comment><comments>http://www.cppblog.com/guogangj/archive/2011/09/13/155703.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/guogangj/comments/commentRss/155703.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guogangj/services/trackbacks/155703.html</trackback:ping><description><![CDATA[<p><span style="color: red">注：本文并不是一篇很全面的介绍网站发布的文章，仅供入门参考。</span><br /><br />发布网站有多种形式，比较传统的方式是使用FTP，或者用Windows远程桌面之类的，将各个aspx和dll复制到对应的服务器目录中去。这样做的缺点显而易见，就是不够方便，另外很难做到只上传更新过的文件。<br /><br />强大的Visual Studio提供了直接的网站发布的功能，其实准确说并不是Visual Studio提供的，而是通过了微软提供的一套工具，Web Deployment Tool，这套工具在你安装Visual Studio的时候也就自动安装了，并且跟Visual Studio很好地整合了起来，当然，光是你自己开发用的电脑上装了还是不行的，服务器也得装，反正我用的Windows Server 2003服务器上默认是没有的。这个工具的介绍及下载地址见：<br /><br /><a href="http://technet.microsoft.com/en-us/library/dd569059(WS.10).aspx">http://technet.microsoft.com/en-us/library/dd569059(WS.10).aspx</a><br /><br />然后&#8230;&#8230;<br /><br />我就偷懒一下，详情直接自己看MSDN，后面我只针对可能出现的问题讲讲：<br /><br /><a href="http://msdn.microsoft.com/zh-cn/library/dd465337.aspx">http://msdn.microsoft.com/zh-cn/library/dd465337.aspx</a><br /><br />在你&#8220;Publish Web&#8221;的时候，会出现这个对话框，注意那个&#8220;Site/application&#8221;的选项：<br /><br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/web_publish_1.png" width="516" height="600" /><br /><br />&#8220;/lm/w3svc/1/ROOT/app1&#8221;，这是我的写法，啥意思呢？&#8220;lm&#8221;大概是Local machine，网站发布位置跟前面指定的服务器一致；&#8220;w3svc&#8221;就是IIS服务了，&#8220;1&#8221;是Site ID，这里的&#8220;1&#8221;指的应该就是默认网站；&#8220;ROOT&#8221;这里指的是默认网站的根目录；最后的&#8220;app1&#8221;就是我建的虚拟目录了。如果是别的情况，请上MSDN查查看。这段讲解其实连我自己都不是很确定，这个选项很晦涩，又很关键，写错了就发布不成功。<br /><br />后面的User name/Passworld自然得要有管理员权限了。<br /><br />如果这里你成功了，你会很快发现一个问题，那就是web.config这个文件，服务器的配置一般跟本地调试的配置是不同的，你发布的时候是直接把本地的这个文件上传到服务器了，肯定是不对的了，怎么改？<br /><br />其实你如果是用向导创建工程的话，你就会发现web.config这个节点打开的话下面有两个文件，如图：<br /><br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/web_publish_2.png" width="188" height="48" /><br /><br />如果没有，你也可以右击web.config，然后在弹出的菜单中选择&#8220;Add Config Transforms&#8221;，&#8220;Web.Debug.Config&#8221;是用来在发布Debug版的网站的时候，用来对web.config做一些修改的，&#8220;Web.Release.Config&#8221;是用来在发布Release网站的时候，用来对web.config做一些修改的，如果你有更多的配置文件，这种&#8220;Config Transforms&#8221;会有更多个。<br /><br />你打开Web.Debug.Config看看，其实上面都已经有注释教你如何来写这个文件的了，只不过如果你需要更详细的信息的话，就不够，你得参看这个链接：<br /><br /><a href="http://msdn.microsoft.com/zh-cn/library/dd465326.aspx">http://msdn.microsoft.com/zh-cn/library/dd465326.aspx</a><br /><br />要全部学会里面的内容，一来很难，二来没必要，我们做项目，不是在做科研，感觉就是掌握原理，然后见招拆招，有需要再打开参考吧。<br /><br />希望本文能帮上你些忙。<br /></p><img src ="http://www.cppblog.com/guogangj/aggbug/155703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guogangj/" target="_blank">Jiang Guogang</a> 2011-09-13 22:11 <a href="http://www.cppblog.com/guogangj/archive/2011/09/13/155703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装VS2010后VS2008无法调试Windows Mobile程序的问题</title><link>http://www.cppblog.com/guogangj/archive/2011/09/08/155351.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Thu, 08 Sep 2011 06:07:00 GMT</pubDate><guid>http://www.cppblog.com/guogangj/archive/2011/09/08/155351.html</guid><wfw:comment>http://www.cppblog.com/guogangj/comments/155351.html</wfw:comment><comments>http://www.cppblog.com/guogangj/archive/2011/09/08/155351.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guogangj/comments/commentRss/155351.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guogangj/services/trackbacks/155351.html</trackback:ping><description><![CDATA[大概大约半年多前遇到过一次，当时Windows Phone 7的SDK发布，好奇，也就下载了一个安装了，感觉在公司的破机器（E2200的CPU）上跑得很慢，更郁闷的是由于显卡不支持DX9，Windows Phone 7模拟器的运行效果惨不忍睹，而这些其实都没什么，因为装了这个，导致我的VS2008无法调试Windows Mobile的程序了，现象如图：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/f5_error.png" width="415" height="249" /><br />按F5，Deploy成功之后就立即弹出这个消息款，只有一个&#8220;确定&#8221;按钮，没有任何别的提示。折腾了半天依旧如此，网上查资料，可能是由于还做Windows Mobile开发的人太少，没几个人遇到这个问题，相似的都是说ASP.net在VS2010下无法启动调试，需要修改Web.config配置等。<br /><br />不幸中的万幸是我卸载掉VS2010之后，一切都正常了，所以之后也一直没安装VS2010。<br /><br />而最近项目需求又要用到VS2010，我清理了半天已经&#8220;见红&#8221;的系统盘之后开始安装VS2010 Ultimate版本，之前装的是Express版，安装中还不断祈祷不要出现以前那种问题。结果，还是出现了，难道我只能卸载掉VS2010么？毕竟调试Windows Mobile程序是必须的。心不甘，毕竟装一次卸一次花费时间不少。<br /><br />用google搜索了半天后，终于，功夫不负有心人，在Microsoft的官方网站上找到了解决方案：<br /><a href="http://social.msdn.microsoft.com/Forums/en/windowsphone7series/thread/7afdadc0-7e16-4018-85a8-a13fe9c4b8cb">http://social.msdn.microsoft.com/Forums/en/windowsphone7series/thread/7afdadc0-7e16-4018-85a8-a13fe9c4b8cb</a><br />浏览完整个帖子之后，知道大概缘由是这样：<br /><br />由于VS2010改变了某些环境变量，导致VS2008找不到调试器，在我的机器上，VS2008的智能设备调试器存放处是：<br />C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\Debugger\target\wce400\armv4i\edm2.exe<br />将这个文件复制到VS2010的相应目录下就OK了：<br />D:\Program Files\Microsoft Visual Studio 10.0\SmartDevices\Debugger\target\wce400\armv4i\edm2.exe<br />也许你已经发现，由于系统盘捉襟见肘的剩余空间，我把VS2010安装到D盘了，但在系统盘依旧要占用不少空间的。希望老板很快给我换好机器&#8230;&#8230;<br /><img src ="http://www.cppblog.com/guogangj/aggbug/155351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guogangj/" target="_blank">Jiang Guogang</a> 2011-09-08 14:07 <a href="http://www.cppblog.com/guogangj/archive/2011/09/08/155351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#实现类似C++功能的困惑</title><link>http://www.cppblog.com/guogangj/archive/2011/08/18/153813.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Thu, 18 Aug 2011 15:07:00 GMT</pubDate><guid>http://www.cppblog.com/guogangj/archive/2011/08/18/153813.html</guid><wfw:comment>http://www.cppblog.com/guogangj/comments/153813.html</wfw:comment><comments>http://www.cppblog.com/guogangj/archive/2011/08/18/153813.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/guogangj/comments/commentRss/153813.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guogangj/services/trackbacks/153813.html</trackback:ping><description><![CDATA[<div>我要实现一个功能，用C++表达如下：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;g_iTest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;全局变量</span><span style="color: #008000"><br /></span><span style="color: #000000"><br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;A<br />{<br />A(</span><span style="color: #0000ff">int</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pVal){m_pVal&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pVal;}&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将指针记录下来</span><span style="color: #008000"><br /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Increase(){(</span><span style="color: #000000">*</span><span style="color: #000000">m_pVal)</span><span style="color: #000000">++</span><span style="color: #000000">;}<br />}<br /><br /></span><span style="color: #008000">//</span><span style="color: #008000"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span style="color: #008000"><br /></span><span style="color: #000000">A&nbsp;a(</span><span style="color: #000000">&amp;</span><span style="color: #000000">g_iTest);<br />a.Increase();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">会改变g_iTest的值</span></div>换句话说，我想保存一个int的引用，对这个成员int的操作就是对那个全局int的操作，这样的功能，如何用C#来实现？<br /><br />由于int是值传递，所以没办法保存这个&#8220;引用&#8221;。<br /><br />我开始尝试使用unsafe的指针，但当我对System.Drawing.Color取址的时候，居然出现CS0208编译错误。纳闷。<br /><br />然后尝试使用装箱/拆箱的方法来传递一个object来实现，但A(object val)这样的构造函数确实太不美观，光看这个构造函数，谁知道A想要的是个整型？<br /><br />最后&#8230;&#8230;唉，自己弄了个MyInt。<br /><br />写MyInt的时候，我第一想到的就是类似C++的自动类型转换，使得我可以自由无碍地把整型&#8220;赋值&#8221;给MyInt，反之亦然，但我发觉C#的类型转换运算符重载函数居然必须是static的，完全没用。<br /><br />最最后&#8230;&#8230;先将就着吧。</div><img src ="http://www.cppblog.com/guogangj/aggbug/153813.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guogangj/" target="_blank">Jiang Guogang</a> 2011-08-18 23:07 <a href="http://www.cppblog.com/guogangj/archive/2011/08/18/153813.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从C++到C#的一些注意事项</title><link>http://www.cppblog.com/guogangj/archive/2011/08/08/152776.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Mon, 08 Aug 2011 05:03:00 GMT</pubDate><guid>http://www.cppblog.com/guogangj/archive/2011/08/08/152776.html</guid><wfw:comment>http://www.cppblog.com/guogangj/comments/152776.html</wfw:comment><comments>http://www.cppblog.com/guogangj/archive/2011/08/08/152776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guogangj/comments/commentRss/152776.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guogangj/services/trackbacks/152776.html</trackback:ping><description><![CDATA[<div>C++毫无疑问是软件开发工具中的工业标准，但要说做Windows开发，现在恐怕看起来还是用.net比较划算，使用.net的C++叫&#8220;Managed C++&#8221;，我看了之后只想说这句话：这货不是C++。这里顺带提起一次面试经历，是我面试别人，我告诉来面试的人：&#8220;我们目前的软件项目使用C++开发，没用.net。&#8221;他一脸诧异地问道：&#8220;你现在用的是VC6？&#8221;我说：&#8220;不是，我用的是VS2008。&#8221;他说：&#8220;那你用的就是.net，从VS2003开始都是.net。&#8221;我解释道：&#8220;我在做本地开发，没使用.net。&#8221;而这位哥们继续坚持说我就是用.net开发，我很郁闷，也许我们说的是不同的话，互相之间无法理解得了。总而言之，Managed C++的用户是极少的，从某种意义上说，C#为.net而生，而.net也为C#而生，用C++做.net开发可是半点优势都没有。这是题外话，OK，进入正题。<br /><br /><strong>1，最最最要注意的就是：垃圾回收机制<br /></strong><br />C#没有delete，其托管资源不需要delete，也不能显式delete，完全由.net的垃圾回收器来管理。<br /><br />稍微有点麻烦的是非托管资源，比如打开的文件句柄，创建的位图句柄等，这些是非托管资源，如果一直不显式回收，那有可能会越来越多，那怎么办？这方面的问题在绝大多数的C#的书籍上都有讲述，有时候看得人晕头转向的，其实我们只要遵循这么一种规范，就可以应对不说100%，也有99%的情况了：<br /><br />类中没有非托管资源的情况下，啥都不用管，也不用实现析构函数。<br />如果类中有非托管资源，则应该实现析构函数，并且在析构函数中释放资源。<br />如果类中有非托管资源，并且想让类使用者提前释放掉这些非托管资源的话，那就实现一个Dispose的方法来释放非托管资源，再加上这么一行代码GC.SuppressFinalize(this);以此来告诉.net的垃圾回收器，不需要再调用一次析构函数来释放非托管资源了。<br /><br /><strong>2，值/引用，struct/class</strong><br /><br />C#的struct和class差别很大，不像C++那样几乎没什么差别，struct适用于创建小的结构，它使用的是值传递，而用class的对象使用的是引用传递。<br /><br />值，存在于栈区，而引用，则存在于堆区。<br /><br />struct：存在于栈区，可用new初始化（也可以不用），没有默认构造函数（但可以添加构造函数，也可以不添加），没析构函数，不能被继承。<br />class：存在于堆区，必须用new初始化，有默认构造函数，有析构函数，当然能被继承啦。<br /><br /><strong>3，注意装箱和拆箱</strong><br /><br />值和引用有时候得互相转换，比如当一个函数需要引用参数，而你却把值传了过去，那么就存在这么一个隐式转换的过程了，这个过程会有额外的性能开销，所以要尽量避免。值转为引用叫&#8220;装箱&#8221;，反过来引用转为值叫&#8220;拆箱&#8221;。装箱可以是隐式的，但拆箱一定是显式的，如：<br /><br />int i = 123;<br />object o = i; //装箱（隐式）<br />int j = (int) o; //拆箱（显式）<br /><br /><strong>4，其它一些语法差别<br /></strong><br />4.1 虚方法必须带上override修饰，否则会有warning。<br />4.2 没有了C++构造函数中的&#8220;初始化列表&#8221;。<br />4.3 布尔和整型是两种不同类型。<br />4.4 switch语句的行为和C++的略有不同。<br /><br /></div><img src ="http://www.cppblog.com/guogangj/aggbug/152776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guogangj/" target="_blank">Jiang Guogang</a> 2011-08-08 13:03 <a href="http://www.cppblog.com/guogangj/archive/2011/08/08/152776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在VMWare上装Mac（AMD CPU）最终没搞定……</title><link>http://www.cppblog.com/guogangj/archive/2011/08/05/152587.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Fri, 05 Aug 2011 13:40:00 GMT</pubDate><guid>http://www.cppblog.com/guogangj/archive/2011/08/05/152587.html</guid><wfw:comment>http://www.cppblog.com/guogangj/comments/152587.html</wfw:comment><comments>http://www.cppblog.com/guogangj/archive/2011/08/05/152587.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/guogangj/comments/commentRss/152587.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guogangj/services/trackbacks/152587.html</trackback:ping><description><![CDATA[<p>本文分享失败经验。<br /><br />装Mac，其实并不是为了好玩，而是想研究下如何进行iPhone开发，公司的电脑是Intel的，但配置太次，玩不起来，于是打算在家装个虚拟机搞搞，我的CPU是AMD的Phenom8450，下面截个图，保证是支持虚拟化技术的，并且确认了在BIOS中已经打开。<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/mac_cpu_status.png" width="478" height="370" /><br />前几星期，听说朋友那里已经搞好了一套，于是周末带移动硬盘去他那里拷贝了一份，回来运行，就出现CPU停止工作的问题，尝试数遍都不行，于是打算自己新安装一个，花了不少时间下了一个DMG文件。还是没搞定，卡在引导上面。<br /><br />参考网上的一些说法，更换用于引导的ISO，无果，出现了不同的错误。<br /><br />1，当使用默认的&#8220;darwin_snow.iso&#8221;或者&#8220;darwin300.iso&#8221;的时候，出现这样的错误：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/mac_error_1.png" width="523" height="216" /><br /><br />2，当使用号称AMD CPU能用的&#8220;darwin_snow_legacy.iso&#8221;的时候，卡在这个画面上，半天不动，只好放弃：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/mac_error_2.png" width="1033" height="775" /><br /><br />3，当使用&#8220;Rebel EFI.iso&#8221;的时候，出现了这样的错误：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/error.png" width="520" height="175" /><br /><br />总之无法继续了，我尝试的细节就不一一在这里贴出来了，网上有个哥们也是用AMD CPU的，一番折腾后，他的结论是&#8220;珍爱生命，远离Mac&#8221;。<br /><br />算了，暂时放弃，真要弄iPhone的话估计还是直接买一台Macbook来得划算，折腾不起。</p><img src ="http://www.cppblog.com/guogangj/aggbug/152587.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guogangj/" target="_blank">Jiang Guogang</a> 2011-08-05 21:40 <a href="http://www.cppblog.com/guogangj/archive/2011/08/05/152587.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gSOAP在Windows Mobile平台上的使用总结</title><link>http://www.cppblog.com/guogangj/archive/2011/08/02/152280.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Tue, 02 Aug 2011 05:57:00 GMT</pubDate><guid>http://www.cppblog.com/guogangj/archive/2011/08/02/152280.html</guid><wfw:comment>http://www.cppblog.com/guogangj/comments/152280.html</wfw:comment><comments>http://www.cppblog.com/guogangj/archive/2011/08/02/152280.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/guogangj/comments/commentRss/152280.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guogangj/services/trackbacks/152280.html</trackback:ping><description><![CDATA[<p>gSOAP是很好的东西，它弥补了C++库对Webservice支持的不足，让C++的开发者能够轻松使用Webservice，不过说轻松其实也不轻松，到目前为止，我没有用过什么开源的库是一到手就能很顺利地使用的，总是经过了这个那个的折腾，最后才能用，虽然很多问题也都是只差那么一丁点儿，但就是那么一丁点儿却让人焦头烂额。</p>
<p>Windows Mobile没落了&#8230;&#8230;我不止一次提起这话，我甚至怀疑我现在开发的Windows Mobile程序是不是最后一个获得较多用户的Windows Mobile程序，也许弄完了这个之后，也没什么人再会涉足这个领域了。</p>
<h2>ASMX接口定义文件</h2>
<p>OK，废话不说了，言归正传，Webservice最最最典型的应用是什么？&#8212;&#8212;更新天气，你看看Webservice的入门文章，都是拿天气更新作为范例，而我做的这个正好也是一个天气更新，接口是我定义的，具体就不贴出来了，总而言之我们要从WSDL这个接口文件出发，假设你已经有了这个WSDL文件了，文件名为&#8220;SSPWeatherService.asmx&#8221;。（不懂WSDL的话建议先了解下Webservice）</p>
<h2>获取一份gSOAP并安装</h2>
<p>接着要去获取一份gSOAP的代码，地址是gsoap2.sourceforge.net，我下载的版本是2.8.3，这是2011年6月更新的，在这前我下载了2.8.2，这两个版本用起来还有些微小的差别，哪个更好？当然是新的更好了。</p>
<p>下载完之后当然是解压缩，我是把它解压缩到&#8220;D:\gsoap&#8221;这个路径下。然后给系统环境变量&#8220;path&#8221;增加这么一个路径：&#8220;D:\gsoap\gsoap\bin\win32\&#8221;，这完全是为了一会儿方便调用到&#8220;wsdl2h.exe&#8221;和&#8220;soapcpp2.exe&#8221;，否则你还得输入exe的完整路径。</p>
<h2>根据asmx生成相关文件</h2>
<p>将刚才那个WSDL文件&#8220;SSPWeatherService.asmx&#8221;放到你的工作目录下，比如&#8220;D:\work\SSPWeatherUpdate_WS&#8221;，然后使用命令行工具，如下执行：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/gsoap_1.png" /><br />其中涉及到两个命令：<br />&gt;wsdl2h SSPWeatherService.asmx -o SSPWeatherService.h<br />&gt;soapcpp2 SSPWeatherService.h -ID:\gsoap\gsoap\import -C -x -i<br />第一个命令是根据WSDL文件生成相应的头文件，用-o参数指定生成的头文件的名称。<br />第二个命令死根据刚生成的头文件来生成别的头文件和cpp文件。-I后面是gSOAP的import目录的路径，这个是必须的，-C表示只生成客户端代码，这正是我们需要的，-x可以少生成一些垃圾，-i表示生成C++封装代码，用C++封装好的代码比纯C代码好用多了。</p>
<h2>对生成内容的简单说明</h2>
<p>接下来你查看目录中的文件可能是这样：<br />soapC.cpp<br />soapH.h<br />soapSSPWeatherServiceSoapProxy.cpp<br />soapSSPWeatherServiceSoapProxy.h<br />soapStub.h<br />SSPWeatherService.asmx<br />SSPWeatherService.h<br />SSPWeatherServiceSoap.nsmap<br />也就是说，除了asmx和第一步生成的h文件之外，之后生成的文件有这些：<br />soapC.cpp<br />soapH.h<br />soapSSPWeatherServiceSoapProxy.cpp<br />soapSSPWeatherServiceSoapProxy.h<br />soapStub.h<br />SSPWeatherServiceSoap.nsmap<br />可能你还会碰到下面这几个文件，这跟你原本的asmx的接口定义有关系：<br />soapSSPWeatherServiceSoap12Proxy.cpp<br />soapSSPWeatherServiceSoap12Proxy.h<br />SSPWeatherServiceSoap12.nsmap<br />&#8220;12&#8221;表示soap的1.2版本，你比较一下，发现这几个文件跟上面提到的几个文件的内容是几乎一致的，除了里面的名称大多都加上了&#8220;12&#8221;，对我来说这几个文件是不需要的，所以删除掉了。</p>
<h2>创建一个工程</h2>
<p>接下去当然是用Visual Studio创建一个工程来使用刚才生成的这些文件了。我创建的Project名称为&#8220;SSPWeatherUpdate_WS&#8221;，目录也是刚才的那个目录，为了简单起见，创建一个console类型的程序用来测试就行了。</p>
<p>然后把刚才生成的这些文件添加到这个Project中去：<br />soapC.cpp<br />soapH.h<br />soapSSPWeatherServiceSoapProxy.cpp<br />soapSSPWeatherServiceSoapProxy.h<br />soapStub.h<br />SSPWeatherService.h<br />也许你注意到了，asmx和nsmap文件是不需要添加的。</p>
<p>然后是很关键的一部，把D:\gsoap\gsoap目录下的stdsoap2.h和stdsoap2.cpp复制到刚创建的工程目录并添加到工程中去。完了之后Project里应该有这些东西：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/gsoap_2.png" /></p>
<h2>编译以及可能的问题</h2>
<p>编译一下看看，能不能通过。可能出现了一大堆的错误，可能你会看到这样的出错提示：<br />&#8220;1&gt;.\soapC.cpp(16) : warning C4627: '#include "soapH.h"': skipped when looking for precompiled header use&#8221;<br />这是因为工程设置了使用&#8220;预编译头&#8221;，我们不要使用预编译头，工程属性设置如下图：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/gsoap_3.png" /><br />设置后rebuild，看看还有没有什么问题？在我这里出现了这样的错误提示：<br />1&gt;.\soapC.cpp(850) : error C3861: 'soap_outdateTime': identifier not found<br />1&gt;.\soapC.cpp(855) : error C3861: 'soap_indateTime': identifier not found<br />表面上看是漏掉某个头文件，或者某个编译选项不正确引起，但其实，这正是让我郁闷了好久，努力了好久，最后才发现无解的问题，其中波折就不想在这里赘述了，如果你认为自己技术水平不错，可以直接摆平这个问题的话不妨尝试一下看，但如果时间不是很多的话我劝你就算了，直接采纳我这个结论：gSOAP在WM环境下不支持WSDL中的datetime类型！我不知道这算不算bug，可能准确说&#8220;支持不佳&#8221;，如果前面的asmx是你定义的话，你就改一改，把其中的datetime类型改为string，然后自己在程序中再作转换，如果asmx不是你定义的话，那就很不幸了，我也没辙了，修改gSOAP的代码是很痛苦的工作，我费了很大力气最后都没解决，如果你有能力解决，不妨跟我分享一下。</p>
<h2>使用Webservice</h2>
<p>我直接贴上我的完整代码，希望能够抛砖引玉。</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">stdafx.h</span><span style="color: #000000">"</span><span style="color: #000000"><br />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">string</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">soapSSPWeatherServiceSoapProxy.h</span><span style="color: #000000">"</span><span style="color: #000000"><br />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">SSPWeatherServiceSoap.nsmap</span><span style="color: #000000">"</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /><br />BOOL&nbsp;UTF8ToTChar(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pUTF8Str,&nbsp;TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">pTChar)<br />{<br />&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">First,&nbsp;convert&nbsp;it&nbsp;to&nbsp;UNICODE</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;INT&nbsp;len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MultiByteToWideChar(CP_UTF8,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;pUTF8Str,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;NULL,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br />&nbsp;WCHAR&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pWC&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WCHAR[len];<br />&nbsp;MultiByteToWideChar(CP_UTF8,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;pUTF8Str,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;pWC,&nbsp;len);<br />&nbsp;pWC[len</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">\0</span><span style="color: #000000">'</span><span style="color: #000000">;<br /><br />&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Second,&nbsp;convert&nbsp;UNICODE&nbsp;to&nbsp;TCHAR</span><span style="color: #008000"><br /></span><span style="color: #000000">#ifdef&nbsp;UNICODE<br />&nbsp;pTChar&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pWC;<br /></span><span style="color: #0000ff">#else</span><span style="color: #000000"><br />&nbsp;len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;WideCharToMultiByte(CP_ACP,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;pWC,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;NULL,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;NULL,&nbsp;NULL);<br />&nbsp;pTChar&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TCHAR[len];<br />&nbsp;WideCharToMultiByte(CP_ACP,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;pWC,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;pTChar,&nbsp;len,&nbsp;NULL,&nbsp;NULL);<br />&nbsp;pTChar[len</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">\0</span><span style="color: #000000">'</span><span style="color: #000000">;<br />&nbsp;delete[]&nbsp;pWC;<br /></span><span style="color: #0000ff">#endif</span><span style="color: #000000"><br /><br />&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;TRUE;<br />}<br /><br />BOOL&nbsp;TCharToUTF8(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pTChar,&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">pUTF8Str)<br />{<br />&nbsp;INT&nbsp;len;<br />#ifdef&nbsp;UNICODE<br />&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;WCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pWC&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pTChar;<br /></span><span style="color: #0000ff">#else</span><span style="color: #000000"><br />&nbsp;len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MultiByteToWideChar(CP_ACP,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;pTChar,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;NULL,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br />&nbsp;WCHAR&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pWC&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WCHAR[len];<br />&nbsp;MultiByteToWideChar(CP_ACP,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;pTChar,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;pWC,&nbsp;len);<br />&nbsp;pWC[len</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">\0</span><span style="color: #000000">'</span><span style="color: #000000">;<br /></span><span style="color: #0000ff">#endif</span><span style="color: #000000"><br />&nbsp;len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;WideCharToMultiByte(CP_UTF8,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;pTChar,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;NULL,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;NULL,&nbsp;NULL);<br />&nbsp;pUTF8Str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">[len];<br />&nbsp;WideCharToMultiByte(CP_UTF8,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;pTChar,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;pUTF8Str,&nbsp;len,&nbsp;NULL,&nbsp;NULL);<br />&nbsp;pUTF8Str[len</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">\0</span><span style="color: #000000">'</span><span style="color: #000000">;<br />#ifdef&nbsp;UNICODE<br />&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span style="color: #008000"><br /></span><span style="color: #0000ff">#else</span><span style="color: #000000"><br />&nbsp;delete[]&nbsp;pWC;<br /></span><span style="color: #0000ff">#endif</span><span style="color: #000000"><br />&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;TRUE;<br />}<br /><br /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ReleaseChar(</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">pChar)<br />{<br />&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(pChar</span><span style="color: #000000">!=</span><span style="color: #000000">NULL)<br />&nbsp;{<br />&nbsp;&nbsp;delete[]&nbsp;pChar;<br />&nbsp;&nbsp;pChar&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br />&nbsp;}<br />}<br /><br /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ReleaseTChar(TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">pTChar)<br />{<br />&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(pTChar</span><span style="color: #000000">!=</span><span style="color: #000000">NULL)<br />&nbsp;{<br />&nbsp;&nbsp;delete[]&nbsp;pTChar;<br />&nbsp;&nbsp;pTChar&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br />&nbsp;}<br />}<br /><br /></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;OUTPUT_BUFF_LEN&nbsp;512&nbsp;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;DbgStrOut(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;TCHAR&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">fmt,&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />)&nbsp;<br />{&nbsp;<br />&nbsp;TCHAR&nbsp;szOutStr[OUTPUT_BUFF_LEN];&nbsp;<br /><br />&nbsp;va_list&nbsp;ap;&nbsp;<br />&nbsp;va_start(ap,&nbsp;fmt);&nbsp;<br />&nbsp;StringCbVPrintf(szOutStr,&nbsp;OUTPUT_BUFF_LEN,&nbsp;fmt,&nbsp;ap);&nbsp;<br />&nbsp;va_end(ap);&nbsp;<br /><br />&nbsp;OutputDebugString(szOutStr);&nbsp;<br />}<br /><br /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;_tmain(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;argc,&nbsp;_TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;argv[])<br />{<br /><br />&nbsp;SSPWeatherServiceSoapProxy&nbsp;gs(SOAP_C_UTFSTRING);<br />&nbsp;gs.soap_endpoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://www.sosopi.com/weathercastservice/SSPWeatherService.asmx</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><br />&nbsp;_ns1__FindCityByString&nbsp;input;<br />&nbsp;_ns1__FindCityByStringResponse&nbsp;output;<br />&nbsp;CHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszUTF8;<br />&nbsp;TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszCityCode;<br />&nbsp;TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszCityName;<br />&nbsp;TCharToUTF8(L</span><span style="color: #000000">"</span><span style="color: #000000">闵行</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pszUTF8);<br />&nbsp;input.CityToFind&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pszUTF8;<br />&nbsp;ReleaseChar(pszUTF8);<br />&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(SOAP_OK</span><span style="color: #000000">==</span><span style="color: #000000">gs.FindCityByString(</span><span style="color: #000000">&amp;</span><span style="color: #000000">input,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">output))<br />&nbsp;{<br />&nbsp;&nbsp;std::vector</span><span style="color: #000000">&lt;</span><span style="color: #000000">ns1__CityInfo&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">::iterator&nbsp;it&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;output.CityInfo.begin();<br />&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(it</span><span style="color: #000000">!=</span><span style="color: #000000">output.CityInfo.end())<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;ns1__CityInfo&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pCityInfo&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">*</span><span style="color: #000000">it);<br /><br />&nbsp;&nbsp;&nbsp;UTF8ToTChar(pCityInfo</span><span style="color: #000000">-&gt;</span><span style="color: #000000">CityCode.c_str(),&nbsp;pszCityCode);<br />&nbsp;&nbsp;&nbsp;UTF8ToTChar(pCityInfo</span><span style="color: #000000">-&gt;</span><span style="color: #000000">CityName.c_str(),&nbsp;pszCityName);<br />&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">%s&nbsp;%s\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pszCityCode,&nbsp;pszCityName);<br />&nbsp;&nbsp;&nbsp;ReleaseTChar(pszCityCode);<br />&nbsp;&nbsp;&nbsp;ReleaseTChar(pszCityName);<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">it;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(output.MatchCityNumber</span><span style="color: #000000">&gt;=</span><span style="color: #000000">1</span><span style="color: #000000">)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;_ns1__GetWeatherByCityCode&nbsp;input2;<br />&nbsp;&nbsp;&nbsp;_ns1__GetWeatherByCityCodeResponse&nbsp;output2;<br />&nbsp;&nbsp;&nbsp;input2.CityCode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;output.CityInfo[</span><span style="color: #000000">0</span><span style="color: #000000">]</span><span style="color: #000000">-&gt;</span><span style="color: #000000">CityCode;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(SOAP_OK</span><span style="color: #000000">==</span><span style="color: #000000">gs.GetWeatherByCityCode(</span><span style="color: #000000">&amp;</span><span style="color: #000000">input2,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">output2))<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszUpdateTime;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">float</span><span style="color: #000000">&nbsp;fRtTemperature;<br />&nbsp;&nbsp;&nbsp;&nbsp;TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszWindDirection;<br />&nbsp;&nbsp;&nbsp;&nbsp;TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszWindForce;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;UTF8ToTChar(output2.WeatherCast</span><span style="color: #000000">-&gt;</span><span style="color: #000000">UpdateTime.c_str(),&nbsp;pszUpdateTime);<br />&nbsp;&nbsp;&nbsp;&nbsp;fRtTemperature&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;output2.WeatherCast</span><span style="color: #000000">-&gt;</span><span style="color: #000000">RtTemperature;<br />&nbsp;&nbsp;&nbsp;&nbsp;UTF8ToTChar(output2.WeatherCast</span><span style="color: #000000">-&gt;</span><span style="color: #000000">RtWindDirection.c_str(),&nbsp;pszWindDirection);<br />&nbsp;&nbsp;&nbsp;&nbsp;UTF8ToTChar(output2.WeatherCast</span><span style="color: #000000">-&gt;</span><span style="color: #000000">RtWindForce.c_str(),&nbsp;pszWindForce);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">Update&nbsp;Time&nbsp;:&nbsp;%s\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pszUpdateTime);<br />&nbsp;&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">Temperature&nbsp;:&nbsp;%.1f\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;fRtTemperature);<br />&nbsp;&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">Wind&nbsp;Direction&nbsp;:&nbsp;%s\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pszWindDirection);<br />&nbsp;&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">Wind&nbsp;Force&nbsp;:&nbsp;%s\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pszWindForce);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ReleaseTChar(pszUpdateTime);<br />&nbsp;&nbsp;&nbsp;&nbsp;ReleaseTChar(pszWindDirection);<br />&nbsp;&nbsp;&nbsp;&nbsp;ReleaseTChar(pszWindForce);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ns1__ArrayOfOneDayWeather&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pOneDay&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;output2.WeatherCast</span><span style="color: #000000">-&gt;</span><span style="color: #000000">DayWeather;<br />&nbsp;&nbsp;&nbsp;&nbsp;std::vector</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ns1__OneDayWeather&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">::iterator&nbsp;itDW&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pOneDay</span><span style="color: #000000">-&gt;</span><span style="color: #000000">OneDayWeather.begin();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">std::vector&lt;ns1__CityInfo&nbsp;*&nbsp;&gt;::iterator&nbsp;it&nbsp;=&nbsp;output.CityInfo.begin();</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(itDW</span><span style="color: #000000">!=</span><span style="color: #000000">pOneDay</span><span style="color: #000000">-&gt;</span><span style="color: #000000">OneDayWeather.end())<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">##########\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ns1__OneDayWeather&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pDayWeather&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">itDW;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">\tDay&nbsp;temp&nbsp;:&nbsp;%.1f\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pDayWeather</span><span style="color: #000000">-&gt;</span><span style="color: #000000">DtTemperature);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">\tDay&nbsp;weather&nbsp;:&nbsp;%d\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pDayWeather</span><span style="color: #000000">-&gt;</span><span style="color: #000000">DtWeatherID);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszDayWindDirection;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszDayWindForce;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF8ToTChar(pDayWeather</span><span style="color: #000000">-&gt;</span><span style="color: #000000">DtWindDirection.c_str(),&nbsp;pszDayWindDirection);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF8ToTChar(pDayWeather</span><span style="color: #000000">-&gt;</span><span style="color: #000000">DtWindForce.c_str(),&nbsp;pszDayWindForce);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">\tDay&nbsp;Wind&nbsp;Direction&nbsp;:&nbsp;%s\n&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pszDayWindDirection);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">\tDay&nbsp;Wind&nbsp;Force&nbsp;:&nbsp;%s\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pszDayWindForce);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReleaseTChar(pszDayWindDirection);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReleaseTChar(pszDayWindForce);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">\tNight&nbsp;temp&nbsp;:&nbsp;%.1f\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pDayWeather</span><span style="color: #000000">-&gt;</span><span style="color: #000000">NtTemperature);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">\tNight&nbsp;weather&nbsp;:&nbsp;%d\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pDayWeather</span><span style="color: #000000">-&gt;</span><span style="color: #000000">NtWeatherID);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszNightWindDirection;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszNightWindForce;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF8ToTChar(pDayWeather</span><span style="color: #000000">-&gt;</span><span style="color: #000000">NtWindDirection.c_str(),&nbsp;pszNightWindDirection);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF8ToTChar(pDayWeather</span><span style="color: #000000">-&gt;</span><span style="color: #000000">NtWindForce.c_str(),&nbsp;pszNightWindForce);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">\tNight&nbsp;Wind&nbsp;Direction&nbsp;:&nbsp;%s\n&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pszNightWindDirection);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbgStrOut(L</span><span style="color: #000000">"</span><span style="color: #000000">\tNight&nbsp;Wind&nbsp;Force&nbsp;:&nbsp;%s\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pszNightWindForce);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReleaseTChar(pszNightWindDirection);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReleaseTChar(pszNightWindForce);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">itDW;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />}</span></div>
<h2>代码说明</h2>
<p>使用Webservice的过程中，我通过查找&#8220;闵行&#8221;来找到我的城市，再根据城市ID来获取天气，其实代码并不多，多在字符编码转换和Debug输出这部分，因为我们的XML使用UTF-8编码，而我们的软件界面通常使用Unicode编码，所以得转换，英文的情况下不转换是没什么问题的，但汉字一定得转，否则就是乱码了。</p>
<p>另外特别注意这个地方：<br />&nbsp;SSPWeatherServiceSoapProxy gs(SOAP_C_UTFSTRING);<br />&nbsp;gs.soap_endpoint = "<a href="http://www.sosopi.com/weathercastservice/SSPWeatherService.asmx">http://www.sosopi.com/weathercastservice/SSPWeatherService.asmx</a>";<br />SOAP_C_UTFSTRING，这个是用来指定UTF-8编码的，一定不能少，下面这个soap_endpoint参数则用来指明这个Webservice的服务地址。</p>
<h2>可能的问题以及解决方案</h2>
<p><strong>1，超时</strong></p>
<p>程序发布之后有人反映不能使用，Windows Mobile如果用电脑直连的话就没任何问题，但如果用GPRS上网的话还真的可能出现失败的情况，我认为这是因为GPRS速度太慢（用起来感觉还不如以前56K猫拨号上网）导致超时的缘故。可以通过下面办法来解决：<br />&nbsp;pGS.accept_timeout = 30;<br />&nbsp;pGS.connect_timeout = 30;<br />&nbsp;pGS.recv_timeout = 30;<br />&nbsp;pGS.send_timeout = 30;<br />&nbsp;pGS.linger_time = 30;</p>
<p><strong>2，无法用WAP方式更新</strong></p>
<p>许多人用手机上网的时候都喜欢用WAP方式，就是那种用代理服务器的方式，移动的接入点叫cmwap，联通的叫uniwap，代理的地址是&#8220;10.0.0.172&#8221;。由于连接用了代理，gSOAP也得显示指定一个代理，方法如下：<br />pGS-&gt;proxy_host = &#8220;10.0.0.172&#8221;;<br />pGS-&gt;proxy_port = 80;<br />可能不一定是&#8220;10.0.0.172&#8221;，端口也可能不是80，这两个信息可以通过连接管理器相关的API来获得，具体就不展开了，提示一下，用这个：ConnMgrProviderMessage。</p>
<p>我不知道还有什么疑难杂症，这篇文章也无法囊括所有内容，大家只能见招拆招了。<br /></p><img src ="http://www.cppblog.com/guogangj/aggbug/152280.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guogangj/" target="_blank">Jiang Guogang</a> 2011-08-02 13:57 <a href="http://www.cppblog.com/guogangj/archive/2011/08/02/152280.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>帮Windows Mobile实现gmtime，localtime，mktime和strftime</title><link>http://www.cppblog.com/guogangj/archive/2011/06/30/149827.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Thu, 30 Jun 2011 08:45:00 GMT</pubDate><guid>http://www.cppblog.com/guogangj/archive/2011/06/30/149827.html</guid><wfw:comment>http://www.cppblog.com/guogangj/comments/149827.html</wfw:comment><comments>http://www.cppblog.com/guogangj/archive/2011/06/30/149827.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/guogangj/comments/commentRss/149827.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guogangj/services/trackbacks/149827.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 偶尔发现Windows Mobile连一些标准的C语言库函数都没有实现，而这些函数的在头文件中的声明却是有的，实在有些不方便，上网一搜索，才知道原来Windows CE也没实现，而Windows Mobile这方面照搬了Windows CE的，如果真要用这些函数，只能自己来写了，我写了这几个：gmtime，localtime，mktime，strftime，其中用到了Variant Time这个类...&nbsp;&nbsp;<a href='http://www.cppblog.com/guogangj/archive/2011/06/30/149827.html'>阅读全文</a><img src ="http://www.cppblog.com/guogangj/aggbug/149827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guogangj/" target="_blank">Jiang Guogang</a> 2011-06-30 16:45 <a href="http://www.cppblog.com/guogangj/archive/2011/06/30/149827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用VC++访问文本文件</title><link>http://www.cppblog.com/guogangj/archive/2011/06/08/148257.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Wed, 08 Jun 2011 04:26:00 GMT</pubDate><guid>http://www.cppblog.com/guogangj/archive/2011/06/08/148257.html</guid><wfw:comment>http://www.cppblog.com/guogangj/comments/148257.html</wfw:comment><comments>http://www.cppblog.com/guogangj/archive/2011/06/08/148257.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/guogangj/comments/commentRss/148257.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guogangj/services/trackbacks/148257.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 初一看这个标题，稍微做过C++编程的人都不认为这是什么困难的事情，但细细想起来还是有些需要注意的。其中我想最主要的就是文本文件的格式了，我们目前常见的有下面这四种，也就是Windows的记事本所能保存的那四种格式了：1，ANSI，也是我们最最常见的文本文件格式，在中文操作系统中，使用默认的GBK编码，而港台用的繁体中文操作系统则默认使用Big5码，简体中文操作系统打开Big5码的文本文件，会显...&nbsp;&nbsp;<a href='http://www.cppblog.com/guogangj/archive/2011/06/08/148257.html'>阅读全文</a><img src ="http://www.cppblog.com/guogangj/aggbug/148257.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guogangj/" target="_blank">Jiang Guogang</a> 2011-06-08 12:26 <a href="http://www.cppblog.com/guogangj/archive/2011/06/08/148257.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows Mobile上网设置详细图解</title><link>http://www.cppblog.com/guogangj/archive/2011/05/31/147787.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Tue, 31 May 2011 13:48:00 GMT</pubDate><guid>http://www.cppblog.com/guogangj/archive/2011/05/31/147787.html</guid><wfw:comment>http://www.cppblog.com/guogangj/comments/147787.html</wfw:comment><comments>http://www.cppblog.com/guogangj/archive/2011/05/31/147787.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/guogangj/comments/commentRss/147787.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guogangj/services/trackbacks/147787.html</trackback:ping><description><![CDATA[我玩Windows Mobile好几年了，但对其网络设置一直很迷惑，微软这方面做得实在不是很人性化，误导了我不少，所以打算整理一下，争取能找出一种比较&#8220;万能&#8221;的设置方法，我研究的对象是Windows Mobile 6.0及其以上版本的系统，版本太低的就略过吧。<br />开始 -&gt; 设置 -&gt; 连接 -&gt; 连接<br />打开连接设置对话框，在我的手机上是这样显示的：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_01.png" width="241" height="322" /><br />&lt;图1&gt;<br />各台机器上可能不一样，这没关系，我们现在点&#8220;高级&#8221;标签，如图：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_02.png" width="241" height="320" /><br />&lt;图2&gt;<br />再点&#8220;选择网络&#8221;按钮，如图：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_03.png" width="241" height="321" /><br />&lt;图3&gt;<br />点击下拉框，发觉除了&#8220;单位设置&#8221;和&#8220;Internet设置&#8221;两个网络设置之外，还有一个名为&#8220;MMS&#8221;的设置，为了减少迷惑，我们现在只要保留&#8220;单位设置&#8221;和&#8220;Internet 设置&#8221;，把其它的设置删除。在下拉框中选中&#8220;MMS&#8221;，如图：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_04.png" width="242" height="322" /><br />&lt;图4&gt;<br />点&#8220;编辑&#8221;按钮，如图：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_05.png" width="242" height="320" /><br />&lt;图5&gt;<br />选择&#8220;常规&#8221;标签，如图：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_06.png" width="241" height="321" /><br />&lt;图6&gt;<br />点&#8220;删除设置&#8221;按钮。<br />全部删除不必要的网络设置之后，（特别说明：事实上，&#8220;单位设置&#8221;和&#8220;Internet 设置&#8221;两个网络设置虽然不能被删除，但它们的名称却是可以改的，这里假设这两个网络设置的名字还是默认的名字，没有被修改）在&#8220;选择网络&#8221;对话框中，按照图3去设置，上面选择&#8220;Internet 设置&#8221;，下面选择&#8220;单位设置&#8221;，&#8220;单位设置&#8221;是个不太好理解的名称，在英文版的Windows Mobile中，它的名字是&#8220;My Work Network&#8221;，直译过来应该是&#8220;我的工作网络&#8221;，而&#8220;Internet 设置&#8221;在英文版中的名称为&#8220;My ISP&#8221;，直译过来应该是&#8220;我的Internet服务提供者&#8221;，总的来说，意思都不是很明确，这也是让人迷惑的原因之一。<br />特别要说明一下的就是，&#8220;Internet 设置&#8221;和&#8220;单位设置&#8221;这两个网络设置是删除不掉的。<br />我们现在简单地这么理解：<br />&#8220;Internet 设置&#8221;是直连模式，而&#8220;单位设置&#8221;是代理模式。<br />现在，我们点&#8220;在程序自动连接到Internet时&#8221;下面的&#8220;编辑&#8221;按钮，如图：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_07.png" width="240" height="321" /><br />&lt;图7&gt;<br />如果已经有连接项了，那么先把连接项删除，方法是按住连接项，然后在呼出的上下文菜单中选择&#8220;删除&#8221;，如图：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_08.png" width="241" height="322" /><br />&lt;图8&gt;<br />在图7的界面中点&#8220;新建&#8221;按钮，然后如图设置：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_09.png" width="241" height="320" /><br />&lt;图9&gt;<br />其中的名称可以起别的名字，不一定是&#8220;移动Internet&#8221;，这个并不影响最终的结果，好了之后点&#8220;下一步&#8221;，再如图设置：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_10.png" width="242" height="321" /><br />&lt;图10&gt;<br />特别说明：我使用的网络是移动的，所以这里填cmnet，如果我没记错的话，联通的这里应该填写&#8220;uninet&#8221;，联通3G网络的话应该填写&#8220;3gnet&#8221;，电信的则填写&#8220;ctnet&#8221;。<br />好了之后再&#8220;下一步&#8221;，这步留空，什么都不用填，直接点完成，如图：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_11.png" width="240" height="320" /><br />&lt;图11&gt;<br />这个时候，我们就能看到我们刚添加的连接项了，如图：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_12.png" width="242" height="321" /><br />&lt;图12&gt;<br />点&#8220;ok&#8221;，回到上一界面，现在点&#8220;在程序自动连接到专用网络时&#8221;下面的&#8220;编辑&#8221;按钮，出现了类似图7的界面，删除掉不必要的连接项后，我们点&#8220;新建&#8221;，如图设置：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_13.png" width="242" height="322" /><br />&lt;图13&gt;<br />完成后点下一步，再如图设置：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_14.png" width="242" height="321" /><br />&lt;图14&gt;<br />这里我输入的是cmwap，因为我用的是移动的网络，联通的应该是uniwap，联通3G的应该是3gwap，电信的应该是ctwap，大家根据实际情况输入。然后下一步，这步不需要填写什么内容，留空即可。再点&#8220;完成&#8221;，如图：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_15.png" width="242" height="322" /><br />&lt;图15&gt;<br />&#8220;单位设置&#8221;和前面的&#8220;Internet 设置&#8221;不同的是多了&#8220;VPN&#8221;和&#8220;代理服务器设置&#8221;的标签，从上图可以看出来，所以我前面也提到了：&#8220;Internet 设置&#8221;是直连模式，而&#8220;单位设置&#8221;是代理模式。我们接下来设置代理服务器，点&#8220;代理服务器设置&#8221;标签，如图设置：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_16.png" width="241" height="321" /><br />&lt;图16&gt;<br />再点击&#8220;高级&#8221;按钮，如图设置：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/wm_net_setup_17.png" width="241" height="321" /><br />&lt;图17&gt;<br />ok，ok，ok&#8230;&#8230;<br />这样应该就完成了。<br />如果还是不行，那估计就是手机的电话模块有问题，我就遇到过这种情况，电话能打，短信能收能发，但网络无论如何都用不了，重新刷机有可能解决这个问题；另外还有可能就是电话欠费而停机了，即便你充了值，网络服务也未必马上能开通，关闭并重新打开电话或者重启手机可能解决这个问题。<img src ="http://www.cppblog.com/guogangj/aggbug/147787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guogangj/" target="_blank">Jiang Guogang</a> 2011-05-31 21:48 <a href="http://www.cppblog.com/guogangj/archive/2011/05/31/147787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE9无法完全关闭cleartype效果</title><link>http://www.cppblog.com/guogangj/archive/2011/05/02/145502.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Mon, 02 May 2011 10:22:00 GMT</pubDate><guid>http://www.cppblog.com/guogangj/archive/2011/05/02/145502.html</guid><wfw:comment>http://www.cppblog.com/guogangj/comments/145502.html</wfw:comment><comments>http://www.cppblog.com/guogangj/archive/2011/05/02/145502.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/guogangj/comments/commentRss/145502.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guogangj/services/trackbacks/145502.html</trackback:ping><description><![CDATA[今天更新了IE9，折腾了一阵子之后把它卸载了，因为它无法像IE8那样一直显示锐利清晰的问题，我怎么都无法去除网页内容中英文，符号和数字等字符的模糊效果。而IE8的高级选项里的那个&#8220;总是将cleartype用于HTML&#8221;居然找不到了，微软到底在搞什么？有个MVP说可以通过控制面版的cleartype效果调整来使得字体清晰，但我根本就不想开启cleartype，我在控制面版中的cleartype是关闭的。上图吧。<br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/ie8_google.png" width=641 height=388><br>此图是IE8显示google首页的效果，字体很清晰。<br><br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/ie8.png" width=453 height=530><br>看看这是IE8的选项，在多媒体里有一项&#8220;总是将cleartype用于HTML*&#8221;的选项，对我来说很关键，我总是把钩子去掉。<br><br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/ie9_google.png" width=650 height=384><br>这是用IE9显示google首页的效果，看到英文字体很模糊（有些人很喜欢这种&#8220;模糊&#8221;，而我极度反感）。<br><br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/guogangj/ie9.png" width=460 height=534><br>再看IE9的选项，已经把那个选项拿掉了。<br><br>放弃一个软件，只需要一个理由，如果这个理由足够恶的话。<br><br>微软的一些做法确实令我越来越看不懂了，当我们的使用平台逐渐转移到手机，平板电脑等之后，我如今渐渐发觉，操作系统这个壁垒也不是那么坚不可摧的，也许我有一天会真的放弃Windows。
<img src ="http://www.cppblog.com/guogangj/aggbug/145502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guogangj/" target="_blank">Jiang Guogang</a> 2011-05-02 18:22 <a href="http://www.cppblog.com/guogangj/archive/2011/05/02/145502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>