<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_On the way</title><subtitle type="text">Even when I wasn't sure where I was going, I was always in a hurry.</subtitle><id>http://feed.cnblogs.com/blog/u/17160/rss</id><updated>2011-11-24T02:40:44Z</updated><author><name>On the way</name><uri>http://www.cnblogs.com/areliang/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/areliang/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/17160/rss"/><entry><id>http://www.cnblogs.com/areliang/archive/2011/11/24/2261269.html</id><title type="text">VC2008操作Excel2007总结</title><summary type="text">概要网上VC对Excel的操作资料虽然很多，但是很乱，这里做下总结，以后要用了可以参考，免得放在硬盘里时间一长找不到了。本文最后列出了主要的参考源，进一步信息可以从这些网站中获得。代码段均在WinXP+SP3 Excel2007 VS2008+SP1环境下调试通过。这里对Excel OLE对象的调用方式采用了MFC的type Lib。正文准备工作通过type Lib方式引入Excel OLE封装源码文件后，对要用到的头文件做修改。注释import语句，添加Excel对象引用代码（参考资源[2]），注释掉冲突的代码。要引用哪对象就添加哪些对象的头文件，一般下面这些头文件是会被用到的。#incl.</summary><published>2011-11-24T02:18:00Z</published><updated>2011-11-24T02:18:00Z</updated><author><name>On the way</name><uri>http://www.cnblogs.com/areliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/areliang/archive/2011/11/24/2261269.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/areliang/archive/2011/11/24/2261269.html"/><content type="html">&#xD;
 &#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;概要&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;网上&lt;/span&gt;VC&lt;span style="font-family: 宋体;"&gt;对&lt;/span&gt;Excel&lt;span style="font-family: 宋体;"&gt;的操作资料虽然很多，但是很乱，这里做下总结，以后要用了可以参考，免得放在硬盘里时间一长找不到了。本文最后列出了主要的参考源，进一步信息可以从这些网站中获得。&lt;/span&gt;&lt;/p&gt;&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;代码段均在&lt;/span&gt;WinXP+SP3 Excel2007 VS2008+SP1&lt;span style="font-family: 宋体;"&gt;环境下调试通过。&lt;/span&gt;&lt;/p&gt;&lt;p style="text-indent: 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;这里对&lt;/span&gt;Excel OLE&lt;span style="font-family: 宋体;"&gt;对象的调用方式采用了&lt;/span&gt;MFC&lt;span style="font-family: 宋体;"&gt;的&lt;/span&gt;type Lib&lt;span style="font-family: 宋体;"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;正文&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;准备工作&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;通过&lt;/span&gt;type Lib&lt;span style="font-family: 宋体;"&gt;方式引入&lt;/span&gt;Excel OLE&lt;span style="font-family: 宋体;"&gt;封装源码文件后，对要用到的头文件做修改。注释&lt;/span&gt;import&lt;span style="font-family: 宋体;"&gt;语句，添加&lt;/span&gt;Excel&lt;span style="font-family: 宋体;"&gt;对象引用代码（参考资源&lt;/span&gt;[2]&lt;span style="font-family: 宋体;"&gt;），注释掉冲突的代码。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;要引用哪对象就添加哪些对象的头文件，一般下面这些头文件是会被用到的。&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: rgb(255, 255, 204); color: blue; font-family: 新宋体; font-size: 9pt;"&gt;#include&lt;/span&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(163, 21, 21); background-color: rgb(255, 255, 204);"&gt;"CApplication.h"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: rgb(255, 255, 204); color: blue; font-family: 新宋体; font-size: 9pt;"&gt;#include&lt;/span&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(163, 21, 21); background-color: rgb(255, 255, 204);"&gt;"CWorkbooks.h"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: rgb(255, 255, 204); color: blue; font-family: 新宋体; font-size: 9pt;"&gt;#include&lt;/span&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(163, 21, 21); background-color: rgb(255, 255, 204);"&gt;"CWorkbook.h"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: rgb(255, 255, 204); color: blue; font-family: 新宋体; font-size: 9pt;"&gt;#include&lt;/span&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(163, 21, 21); background-color: rgb(255, 255, 204);"&gt;"CWorksheets.h"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background: rgb(255, 255, 204); color: blue; font-family: 新宋体; font-size: 9pt;"&gt;#include&lt;/span&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(163, 21, 21); background-color: rgb(255, 255, 204);"&gt;"CWorksheet.h"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;打开&lt;/span&gt;Excel App&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;对象&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;CApplication&lt;/span&gt;&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: blue; background-color: rgb(255, 255, 204);"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;( !&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;CreateDispatch&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;_T&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(163, 21, 21); background-color: rgb(255, 255, 204);"&gt;"Excel.Application"&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;)))&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt; {&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: blue; background-color: rgb(255, 255, 204);"&gt;return&lt;/span&gt; &lt;span style="color: blue; background-color: rgb(255, 255, 204);"&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;新建&lt;/span&gt;Excel&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;文件和&lt;/span&gt;Sheet&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background: rgb(255, 255, 204); color: rgb(2, 0, 2); font-family: 新宋体; font-size: 9pt;"&gt;&amp;nbsp; CWorkbooks&lt;/span&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;books&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;CWorkbook&lt;/span&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;book&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;CWorksheets&lt;/span&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;sheets&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;CWorksheet&lt;/span&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;sheet&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;books&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;=&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;get_Workbooks&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;book&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;=&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;books&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;Add&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;sheets&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;=&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;book&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;get_Sheets&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;sheet&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;=&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;sheets&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;get_Item&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;COleVariant&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;((&lt;span style="color: blue; background-color: rgb(255, 255, 204);"&gt;short&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;)&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;nSheetNumber&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 新宋体; font-size: 9pt;"&gt;一般nSheetNumber取值为1，即下面的代码将对第一张Sheet进行操作。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;显示&lt;/span&gt;Excel&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;报表（控件）&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;put_Visible&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;TRUE&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;put_UserControl&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;TRUE&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;打开已存在的&lt;/span&gt;Excel&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;文件和&lt;/span&gt;Sheet&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: rgb(255, 255, 204); color: rgb(2, 0, 2); font-family: 新宋体; font-size: 9pt;"&gt;books&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;= &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;get_Workbooks&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;book&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt; = &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;books&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;Open&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;filename&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;GetBuffer&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;MAX_PATH&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;),&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;,&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;,&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;,&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;,&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;,&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;,&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;,&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;,&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;,&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;,&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;,&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;,&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;,&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;covOptional&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;sheets&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt; =&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;book&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;get_Worksheets&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;sheet&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;=&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;sheets&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;get_Item&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;COleVariant&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;((&lt;span style="color: blue; background-color: rgb(255, 255, 204);"&gt;short&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;)&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;nSheetNumber&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;读取&lt;/span&gt;Excel&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;文件中单元格的内容&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;CRange&lt;/span&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;range&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;range&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt; = &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;sheet&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;get_Range&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;COleVariant&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;startRange&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;GetBuffer&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;MAX_PATH&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;)),&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;COleVariant&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;endRange&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;GetBuffer&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;MAX_PATH&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;)));&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;COleVariant&lt;/span&gt;&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;cov&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt; = &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;range&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;get_Value2&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;CString&lt;/span&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;str&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt; = (&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;LPCWSTR&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;)&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;cov&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;bstrVal&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;其中&lt;/span&gt;startRange&lt;span style="font-family: 宋体;"&gt;和&lt;/span&gt;endRange&lt;span style="font-family: 宋体;"&gt;为&lt;/span&gt;CString&lt;span style="font-family: 宋体;"&gt;实例，是单元格的位置，例如&amp;#8220;&lt;/span&gt;A1&lt;span style="font-family: 宋体;"&gt;&amp;#8221;、&amp;#8220;&lt;/span&gt;A2&lt;span style="font-family: 宋体;"&gt;&amp;#8221;、&amp;#8220;&lt;/span&gt;B1&lt;span style="font-family: 宋体;"&gt;&amp;#8221;等。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;写&lt;/span&gt;Excel&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;文件中单元格的内容&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;CRange&lt;/span&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;range&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;range&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;=&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;sheet&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;get_Range&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;COleVariant&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;startRange&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;GetBuffer&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;MAX_PATH&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;)),&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;COleVariant&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;endRange&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;GetBuffer&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;MAX_PATH&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;)));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;range&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;put_Value2&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;COleVariant&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;strValue&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;GetBuffer&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;(&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;MAX_PATH&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;)));&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: green; background-color: rgb(255, 255, 204);"&gt;//font=range.get_Font();&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: green; background-color: rgb(255, 255, 204);"&gt;//font.put_Bold(COleVariant((short)TRUE));&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: green; background-color: rgb(255, 255, 204);"&gt;//range.put_Formula(COleVariant(_T("=RAND()")));&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: green; background-color: rgb(255, 255, 204);"&gt;//range.put_NumberFormat(COleVariant(_T("$0.00")));&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: green; background-color: rgb(255, 255, 204);"&gt;//CRange cols;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: green; background-color: rgb(255, 255, 204);"&gt;//cols=range.get_EntireColumn();&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: green; background-color: rgb(255, 255, 204);"&gt;//cols.AutoFit();&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;这里设置了字符串类型，应该还能设置其它类型参数，比如说整型。解开上面代码中的注释，可以尝试下其它功能。参考资源&lt;/span&gt;[1]&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;释放资源&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;books&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;Close&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;Quit&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;books&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;ReleaseDispatch&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background: silver; font-family: 新宋体; font-size: 9pt;"&gt; &lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;app&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;.&lt;span style="color: rgb(2, 0, 2); background-color: rgb(255, 255, 204);"&gt;ReleaseDispatch&lt;/span&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 204); font-family: 新宋体; font-size: 9pt;"&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;上面这段代码建议有，因为读取&lt;/span&gt;Excel&lt;span style="font-family: 宋体;"&gt;文件时，如果没有上面这段代码文件可能会被锁定。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;参考资源&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;[1]&lt;span style="font-family: 宋体;"&gt;《&lt;/span&gt;VS80&lt;span style="font-family: 宋体;"&gt;开启&lt;/span&gt;Excel&lt;span style="font-family: 宋体;"&gt;问题》&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.programmer-club.com.tw/ShowSameTitleN/vc/32776.html"&gt;http://www.programmer-club.com.tw/ShowSameTitleN/vc/32776.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;[2]&lt;span style="font-family: 宋体;"&gt;《&lt;/span&gt;vc &lt;span style="font-family: 宋体;"&gt;如何操作&lt;/span&gt;excel2003&lt;span style="font-family: 宋体;"&gt;（注意一定是&lt;/span&gt;2003&lt;span style="font-family: 宋体;"&gt;）&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;编程》&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://zhidao.baidu.com/question/40379986.html?si=1"&gt;http://zhidao.baidu.com/question/40379986.html?si=1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;[3]&lt;span style="font-family: 宋体;"&gt;《&lt;/span&gt;excel&lt;span style="font-family: 宋体;"&gt;，合并了单元格后该如何定位？》&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://zhidao.baidu.com/question/112923672.html?si=3"&gt;http://zhidao.baidu.com/question/112923672.html?si=3&lt;/a&gt;&lt;/p&gt;&lt;p&gt;-----------------------------------------------------------------------------附------------------&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div &gt;&lt;a id="viewpost1_TitleUrl"  href="http://www.cppblog.com/greatws/archive/2008/09/21/62423.html"&gt;&lt;font color="#1a8bc8"&gt;OLE操作Excel编译错误处理&lt;/font&gt;&lt;/a&gt; &lt;br /&gt;&lt;/div&gt;&amp;nbsp; &lt;br /&gt;Excel在公司用的很多，而这个东西我用的不是很好，就想用程序来处理，遇到很多错误。这几天研究了下OLE操作Excel。&lt;br /&gt;环境：VS2008 &lt;br /&gt;SP1+Excel 2007&lt;br /&gt;&lt;br /&gt;加入OLE Type &lt;br /&gt;Library&lt;br /&gt;随便建立一个MFC程序，选添加类，Typelib中的MFC类，出来一个对话，可用类型库选&amp;#8220;Microsoft Excel 12.0 &lt;br /&gt;Object Library&amp;#8221;&lt;br /&gt;一般来说，添加下边这些类就够了，当然也可以全部添加&lt;br /&gt;CApplication &lt;br /&gt;&lt;br /&gt;CWorkbook&lt;br /&gt;CWorkbooks&lt;br /&gt;CWorksheet&lt;br /&gt;CRange&lt;br /&gt;CWorksheets&lt;br /&gt;CPicture&lt;br /&gt;CPictures&lt;br /&gt;CBorder &lt;br /&gt;&lt;br /&gt;CBorders&lt;br /&gt;CFont0&lt;br /&gt;Cnterior&lt;br /&gt;&lt;br /&gt;包含头文件的时候，把CApplication.h放到最前面&lt;br /&gt;&lt;br /&gt;一个操作的例子&lt;br /&gt;&lt;br /&gt;&lt;div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"  alt="" /&gt;#define VT(x) &lt;br /&gt;_variant_t(x)&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;&lt;br /&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; CExcelTest2Dlg::OnBnClickedButton1()&lt;br /&gt;&lt;img id="Codehighlighter1_42_3064_Open_Image" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /&gt;&lt;img style="display: none;" id="Codehighlighter1_42_3064_Closed_Image" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_42_3064_Closed_Text"&gt;&lt;img src="http://www.cppblog.com/Images/dot.gif"  alt="" /&gt;&lt;/span&gt;&lt;span id="Codehighlighter1_42_3064_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CApplication m_appExcel;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; Excel应用程序&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CWorkbooks m_books;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CWorkbook m_book;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CWorksheets sheets; &lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CWorksheet sheet;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CRange range;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;选择范围&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cnterior interior; &lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CFont0 font;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; 字体&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CBorders borders;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; 边框&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CBorder border;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CRange column;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CRange row;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; 初始化Com&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (::CoInitialize( NULL ) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;==&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; E_INVALIDARG)&lt;br /&gt;&lt;img id="Codehighlighter1_392_429_Open_Image" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /&gt;&lt;img style="display: none;" id="Codehighlighter1_392_429_Closed_Image" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_392_429_Closed_Text"&gt;&lt;img src="http://www.cppblog.com/Images/dot.gif"  alt="" /&gt;&lt;/span&gt;&lt;span id="Codehighlighter1_392_429_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;初始化Com失败!&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; 启动Excel&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; ( &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;!&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;m_appExcel.CreateDispatch(_T(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Excel.Application&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;), NULL))&lt;br /&gt;&lt;img id="Codehighlighter1_510_572_Open_Image" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /&gt;&lt;img style="display: none;" id="Codehighlighter1_510_572_Closed_Image" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_510_572_Closed_Text"&gt;&lt;img src="http://www.cppblog.com/Images/dot.gif"  alt="" /&gt;&lt;/span&gt;&lt;span id="Codehighlighter1_510_572_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox(_T(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;创建Excel失败!&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::CoUninitialize();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; COleVariant covOptional((&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;long&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)DISP_E_PARAMNOTFOUND, VT_ERROR);&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_appExcel.put_Visible(TRUE);&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_books.AttachDispatch(m_appExcel.get_Workbooks()); &lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_book.AttachDispatch(m_books.Add(covOptional));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sheets.AttachDispatch(m_book.get_Worksheets()); &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;得到Worksheets &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sheet.AttachDispatch(sheets.get_Item(_variant_t(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;sheet1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;))); &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;得到sheet1 &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sheet.put_Name(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1234&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;); &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;sheet1改名&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;所有单元格颜色设为白色&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.AttachDispatch(sheet.get_Cells()); &lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interior.AttachDispatch(range.get_Interior());&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interior.put_Color(VT(RGB(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;255&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;255&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;255&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interior.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.ClearContents();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.AttachDispatch(sheet.get_Range(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;A1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;), VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;C1001&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.ClearFormats();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;插入数据&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.put_Item(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;), VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;), VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;函数&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.put_Item(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;), VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;), VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;大项目&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.put_Item(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;), VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;), VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;小项目&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; i&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;++&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;&lt;img id="Codehighlighter1_1435_1539_Open_Image" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /&gt;&lt;img style="display: none;" id="Codehighlighter1_1435_1539_Closed_Image" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_1435_1539_Closed_Text"&gt;&lt;img src="http://www.cppblog.com/Images/dot.gif"  alt="" /&gt;&lt;/span&gt;&lt;span id="Codehighlighter1_1435_1539_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.put_Item(VT(i), VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;), VT(i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.put_Item(VT(i), VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;), VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;37122368~37097735~&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; 为四周和内部加上边框&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; borders.AttachDispatch(range.get_Borders());&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;long&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; xlEdgeLeft; i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; xlInsideHorizontal; i&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;++&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;&lt;img id="Codehighlighter1_1662_1767_Open_Image" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /&gt;&lt;img style="display: none;" id="Codehighlighter1_1662_1767_Closed_Image" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_1662_1767_Closed_Text"&gt;&lt;img src="http://www.cppblog.com/Images/dot.gif"  alt="" /&gt;&lt;/span&gt;&lt;span id="Codehighlighter1_1662_1767_Open_Text"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; border &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; borders.get_Item(i);&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; border.put_LineStyle(VT(xlContinuous));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; border.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; borders.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;调整列宽&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; column &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; range.get_EntireColumn();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; column.put_ColumnWidth(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;18.63&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; column.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.AttachDispatch(sheet.get_Range(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;A10&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;), VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;A20&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;))); &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;选中&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.Merge(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)); &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;合并单元格&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.AttachDispatch(sheet.get_Range(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;A1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;), VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;C1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interior.AttachDispatch(range.get_Interior());&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interior.put_ColorIndex(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;7&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interior.put_Pattern(VT(xlPatternSolid));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interior.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; font.AttachDispatch(range.get_Font());&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; font.put_ColorIndex(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;6&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; font.get_Bold();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; font.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.AttachDispatch(sheet.get_Range(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;A2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;), VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;C1001&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)));&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;设置range对象的范围&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interior.AttachDispatch(range.get_Interior());&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;选择表格内部&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interior.put_ColorIndex(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;13&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;颜色&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interior.put_Pattern(VT(xlPatternSolid));&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;加粗&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interior.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; font.AttachDispatch(range.get_Font());&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;选择字&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; font.put_ColorIndex(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;设置字颜色&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; font.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; row.AttachDispatch(range.get_EntireRow()); &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;选择range里的全部行&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; row.put_RowHeight(VT(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;24&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;行高&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; row.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; range.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sheet.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sheets.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_book.ReleaseDispatch(); &lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_books.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_appExcel.ReleaseDispatch();&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;接下来开始编译，哇，一大堆错误...&lt;br /&gt;&lt;br /&gt;e:\myprograms3\exceltest2\exceltest2\debug\excel.tlh(1461) &lt;br /&gt;: error C2371: &amp;#8220;FontPtr&amp;#8221;: 重定义；不同的基类型&amp;nbsp;&amp;nbsp; 等等&lt;br /&gt;把CApplication.h里的#import &lt;br /&gt;"C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" &lt;br /&gt;no_namespace&lt;br /&gt;改为#import "C:\Program Files\Microsoft Office\OFFICE12\excel.exe" &lt;br /&gt;exclude("IFont", "IPicture") rename("RGB", "ignorethis"), rename("DialogBox", &lt;br /&gt;"ignorethis"), rename("VBE", "GREATWSVBE")&lt;br /&gt;&lt;br /&gt;rebuild &lt;br /&gt;all&lt;br /&gt;e:\myprograms3\exceltest2\exceltest2\debug\excel.tlh(2036) : error C2504: &lt;br /&gt;&amp;#8220;_IMsoDispObj&amp;#8221;: 未定义基类&lt;br /&gt;应该是接口没定义，mso.dll这个接口，在CApplication.h最上面加入#import &lt;br /&gt;"C:\Program Files\Common Files\Microsoft Shared\OFFICE12\mso.dll"&lt;br /&gt;&lt;br /&gt;rebuild &lt;br /&gt;all&amp;nbsp; 错误少多了&lt;br /&gt;还有VBE之类的错误，改法：&lt;br /&gt;加入&lt;br /&gt;#import "C:\Program Files\Common &lt;br /&gt;Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" &lt;br /&gt;raw_interfaces_only, rename("Reference", "ignorethis"), rename("VBE", &lt;br /&gt;"GREATWSVBE")&lt;br /&gt;&lt;br /&gt;注意自己机器的路径！&lt;br /&gt;剩下还有一些rename &lt;br /&gt;的警告，可以在相关import后面几上rename("XXX","XXXXX")&lt;br /&gt;&lt;br /&gt; &#xD;
&lt;img src="http://www.cnblogs.com/areliang/aggbug/2261269.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/areliang/archive/2011/11/24/2261269.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/areliang/archive/2011/11/23/2260566.html</id><title type="text">C++中使用DOM写XML文档</title><summary type="text">#import &amp;lt;msxml4.dll&amp;gt;void Exit(){ CoUninitialize();}int main(int argc, char *argv[]){ CoInitialize(NULL); // 初始化COM环境 atexit(Exit); MSXML2::IXMLDOMDocumentPtr pDOMDoc; pDOMDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); // 创建XMLDOMDocument对象 MSXML2::IXMLDOMProcessingInstructionPtr pDOMPI=p</summary><published>2011-11-23T09:10:00Z</published><updated>2011-11-23T09:10:00Z</updated><author><name>On the way</name><uri>http://www.cnblogs.com/areliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/areliang/archive/2011/11/23/2260566.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/areliang/archive/2011/11/23/2260566.html"/><content type="html">&#xD;
 &#xD;
&lt;p&gt;#import &amp;lt;msxml4.dll&amp;gt;&lt;/p&gt;&lt;p&gt;void Exit()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CoUninitialize();&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;int main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CoInitialize(NULL); // 初始化COM环境&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; atexit(Exit);&lt;/p&gt;&lt;p&gt;MSXML2::IXMLDOMDocumentPtr pDOMDoc;&lt;/p&gt;&lt;p&gt;pDOMDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); // 创建XMLDOMDocument对象&lt;/p&gt;&lt;p&gt;MSXML2::IXMLDOMProcessingInstructionPtr pDOMPI=pDOMDoc-&amp;gt;createProcessingInstruction("xml", "version=\"1.0\""); // 创建XML声明&lt;/p&gt;&lt;p&gt;pDOMDoc-&amp;gt;appendChild(pDOMPI); // 添加XML声明&lt;/p&gt;&lt;p&gt;MSXML2::IXMLDOMElementPtr pDOMRoot;&lt;/p&gt;&lt;p&gt;pDOMDoc-&amp;gt;raw_createElement((_bstr_t)"China", &amp;amp;pDOMRoot); // 创建[根]节点&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pDOMRoot-&amp;gt;setAttribute("Area", "3600000"); // 设置[根]节点属性&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pDOMDoc-&amp;gt;appendChild(pDOMRoot); // 向Document中添加根节点&lt;/p&gt;&lt;p&gt;MSXML2::IXMLDOMElementPtr pDOMNode;&lt;/p&gt;&lt;p&gt;pDOMDoc-&amp;gt;raw_createElement((_bstr_t)"City", &amp;amp;pDOMNode);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pDOMNode-&amp;gt;Puttext("Chongqing"); // 为节点赋值&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pDOMRoot-&amp;gt;appendChild(pDOMNode); // 向[根]节点中添加子节点&lt;/p&gt;&lt;p&gt;pDOMDoc-&amp;gt;raw_createElement((_bstr_t)"City", &amp;amp;pDOMNode);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pDOMNode-&amp;gt;Puttext("Beijing");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pDOMRoot-&amp;gt;appendChild(pDOMNode);&lt;/p&gt;&lt;p&gt;pDOMDoc-&amp;gt;save("Test.xml"); // 储存XML Document&lt;/p&gt;&lt;p&gt;return 0;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;-----------------------------------------------------------------------------xml存在的基础上，读写xml&lt;/p&gt;&lt;p&gt;CoInitialize(NULL);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CComPtr&amp;lt;IXMLDOMDocument&amp;gt; spXmldoc;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(SUCCEEDED(hr))&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VARIANT_BOOL isSuccessFul;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CComVariant varXmlFile(L"tlacd.xml");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //spXmldoc-&amp;gt;put_async(VARIANT_FALSE);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HRESULT hr= spXmldoc-&amp;gt;load(varXmlFile, &amp;amp;isSuccessFul);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(isSuccessFul==VARIANT_TRUE)&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CComBSTR bstrXml;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CComPtr&amp;lt;IXMLDOMElement&amp;gt; spRoot=NULL;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CComPtr&amp;lt;IXMLDOMElement&amp;gt; spTheBook=NULL;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CComPtr&amp;lt;IXMLDOMElement&amp;gt; spTheElem=NULL;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CComPtr&amp;lt;IXMLDOMNode&amp;gt; spNewNode=NULL;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr = spXmldoc-&amp;gt;get_documentElement(&amp;amp;spRoot);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spRoot-&amp;gt;get_xml(&amp;amp;bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AfxMessageBox(L"1, 原始的XML");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AfxMessageBox(bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spXmldoc-&amp;gt;createElement(L"book", &amp;amp;spTheBook);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spXmldoc-&amp;gt;createElement(L"name", &amp;amp;spTheElem);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spXmldoc-&amp;gt;put_text(L"新书");&amp;nbsp;&amp;nbsp; &lt;br /&gt;spTheBook-&amp;gt;appendChild(spTheElem, &amp;amp;spNewNode);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheElem.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spNewNode.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spXmldoc-&amp;gt;createElement(L"price", &amp;amp;spTheElem);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheElem-&amp;gt;put_text(L"20");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheBook-&amp;gt;appendChild(spTheElem, &amp;amp;spNewNode);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheElem.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spNewNode.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spXmldoc-&amp;gt;createElement(L"memo", &amp;amp;spTheElem);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheElem-&amp;gt;put_text(L"新书的更好看。");&amp;nbsp;&amp;nbsp; &lt;br /&gt;spTheBook-&amp;gt;appendChild(spTheElem, &amp;amp;spNewNode);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spNewNode.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheElem.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spRoot-&amp;gt;appendChild(spTheBook, &amp;amp;spNewNode);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spNewNode.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheBook.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spRoot-&amp;gt;get_xml(&amp;amp;bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AfxMessageBox(L"2, 新建一本书完成");&amp;nbsp;&amp;nbsp; &lt;br /&gt;AfxMessageBox(bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ////---&amp;nbsp; 新建一本书完成 ----&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;////---&amp;nbsp; 下面对《哈里波特》做一些修改。 ----&amp;nbsp;&amp;nbsp; &lt;br /&gt;////---&amp;nbsp; 查询找《哈里波特》----&amp;nbsp;&amp;nbsp; &lt;br /&gt;CComPtr&amp;lt;IXMLDOMNode&amp;gt; spTheNode=NULL;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spRoot-&amp;gt;selectSingleNode(L"/books/book[name='哈里波特']", &amp;amp;spTheNode);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr=spTheNode.QueryInterface(&amp;amp;spTheBook);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheNode.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheBook-&amp;gt;get_xml(&amp;amp;bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AfxMessageBox(L"3,《哈里波特》的XML");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AfxMessageBox(bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ////---&amp;nbsp; 此时修改这本书的价格 -----&amp;nbsp;&amp;nbsp; &lt;br /&gt;CComPtr&amp;lt;IXMLDOMNodeList&amp;gt; spNodeList=NULL;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CComPtr&amp;lt;IXMLDOMNode&amp;gt; spListItem=NULL;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheBook-&amp;gt;get_childNodes(&amp;amp;spNodeList);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spNodeList-&amp;gt;get_item(1, &amp;amp;spListItem);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spNodeList.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spListItem-&amp;gt;put_text(L"15");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ////---&amp;nbsp; 另外还想加一个属性id，值为B01 ----&amp;nbsp;&amp;nbsp; &lt;br /&gt;CComVariant varId(L"B01");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheBook-&amp;gt;setAttribute(L"id", varId);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; varId.Clear();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheBook-&amp;gt;get_xml(&amp;amp;bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheBook.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AfxMessageBox(L"4, 对《哈里波特》修改完成。");&amp;nbsp;&amp;nbsp; &lt;br /&gt;AfxMessageBox(bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ////---&amp;nbsp; 对《哈里波特》修改完成。 ----&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;////---&amp;nbsp; 要用id属性删除《三国演义》这本书&amp;nbsp; ----&amp;nbsp;&amp;nbsp; &lt;br /&gt;spRoot-&amp;gt;selectSingleNode(L"/books/book[@id='B02']", &amp;amp;spTheNode);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr=spTheNode.QueryInterface(&amp;amp;spTheBook);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheNode.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheBook-&amp;gt;get_xml(&amp;amp;bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AfxMessageBox(L"5, 《三国演义》的XML");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AfxMessageBox(bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CComPtr&amp;lt;IXMLDOMNode&amp;gt; spParentNode=NULL;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheBook-&amp;gt;get_parentNode(&amp;amp;spParentNode);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spParentNode-&amp;gt;removeChild(spTheBook, &amp;amp;spTheNode);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheNode.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spParentNode.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spTheBook.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spRoot-&amp;gt;get_xml(&amp;amp;bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AfxMessageBox(L"6, 删除《三国演义》后的XML");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AfxMessageBox(bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ////---&amp;nbsp; 再将所有价格低于10的书删除&amp;nbsp; ----&amp;nbsp;&amp;nbsp; &lt;br /&gt;spRoot-&amp;gt;selectNodes(L"/books/book[price&amp;lt;10]", &amp;amp;spNodeList);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CComQIPtr&amp;lt;IXMLDOMSelection&amp;gt; spSomeBooks=spNodeList;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spNodeList.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spSomeBooks-&amp;gt;removeAll();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spSomeBooks.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spXmldoc-&amp;gt;get_xml(&amp;amp;bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AfxMessageBox(L"7, 已经删除价格低于10的书");&amp;nbsp;&amp;nbsp; &lt;br /&gt;AfxMessageBox(bstrXml);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spRoot.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bstrXml.Empty();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //spXmldoc-&amp;gt;save(varXmlFile); //保存xml。&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&amp;nbsp;&amp;nbsp; &lt;br /&gt;varXmlFile.ClearToZero();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; spXmldoc.Release();&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CoUninitialize();&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;img src="http://www.cnblogs.com/areliang/aggbug/2260566.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/areliang/archive/2011/11/23/2260566.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/areliang/archive/2011/11/18/2254334.html</id><title type="text">VC++ MSXML创建XML文件以及对XML文档解析</title><summary type="text">转自http://www.newxing.com/Tech/Program/Cpp/703.html // XmlCreationDemo.cpp#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;stdio.h&amp;gt;// 引入MSXML解析器#import &amp;lt;msxml4.dll&amp;gt;using namespace MSXML2;class InitializeCom{public: InitializeCom() { CoInitialize(NULL); // Initializes the COM library } ~InitializeCom() </summary><published>2011-11-18T08:32:00Z</published><updated>2011-11-18T08:32:00Z</updated><author><name>On the way</name><uri>http://www.cnblogs.com/areliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/areliang/archive/2011/11/18/2254334.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/areliang/archive/2011/11/18/2254334.html"/><content type="html">转自&lt;a href="http://www.newxing.com/Tech/Program/Cpp/703.html"&gt;&lt;font color="#5fa207"&gt;http://www.newxing.com/Tech/Program/Cpp/703.html&lt;/font&gt;&lt;/a&gt; &#xD;
&lt;p&gt;&lt;p&gt;// XmlCreationDemo.cpp&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// 引入MSXML解析器&lt;/p&gt;&#xD;
&lt;p&gt;#import &amp;lt;msxml4.dll&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;using namespace MSXML2;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;class InitializeCom&lt;/p&gt;&#xD;
&lt;p&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;public:&lt;/p&gt;&#xD;
&lt;p&gt;InitializeCom() &amp;nbsp; &amp;nbsp;{ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CoInitialize(NULL); // Initializes the COM library &amp;nbsp; &amp;nbsp;}&lt;/p&gt;&#xD;
&lt;p&gt;~InitializeCom() { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CoUninitialize(); // Closes the COM library &amp;nbsp; &amp;nbsp;}&lt;/p&gt;&#xD;
&lt;p&gt;}InitCom;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;int main()&lt;/p&gt;&#xD;
&lt;p&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;char *szXmlFile = "D:\\china.xml"; // xml文件&lt;/p&gt;&#xD;
&lt;p&gt;IXMLDOMDocumentPtr pDoc = NULL; // xml文档&lt;/p&gt;&#xD;
&lt;p&gt;IXMLDOMProcessingInstructionPtr pProInstruction = NULL; // xml声明&lt;/p&gt;&#xD;
&lt;p&gt;IXMLDOMCommentPtr pComment = NULL; // 注释&lt;/p&gt;&#xD;
&lt;p&gt;IXMLDOMElementPtr pRootElement = NULL, pElement = NULL; // 根节点(元素)&lt;/p&gt;&#xD;
&lt;p&gt;IXMLDOMNodePtr pNode = NULL, pNode1 = NULL, pNode2 = NULL; // 节点&lt;/p&gt;&#xD;
&lt;p&gt;IXMLDOMAttributePtr pAttrNode = NULL; // 属性&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;HRESULT hr = pDoc.CreateInstance(__uuidof(DOMDocument40)); //&lt;/p&gt;&#xD;
&lt;p&gt;if (FAILED(hr))&lt;/p&gt;&#xD;
&lt;p&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;printf("无法创建DOMDocument40对象，请检查是否安装并初始化了MsXml Parser库！");&lt;/p&gt;&#xD;
&lt;p&gt;return EXIT_FAILURE;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (1)创建xml文档声明(或insertBefore根节点)&lt;/p&gt;&#xD;
&lt;p&gt;pProInstruction = pDoc-&amp;gt;createProcessingInstruction((_bstr_t)(char*)"xml", (_bstr_t)(char*)"version=\"1.0\" encoding=\"utf-8\"");&lt;/p&gt;&#xD;
&lt;p&gt;pDoc-&amp;gt;appendChild((IXMLDOMNode*)pProInstruction);&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (2)创建根节点&amp;lt;China&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;pRootElement = &amp;nbsp;pDoc-&amp;gt;createElement((_bstr_t)(char*)"China"); &amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;pDoc-&amp;gt;PutRefdocumentElement(pRootElement); // pXMLDomDoc-&amp;gt;documentElement = pRootElement;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (3)创建节点&amp;lt;China&amp;gt;&amp;lt;Continent&amp;gt; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;pComment = pDoc-&amp;gt;createComment((_bstr_t)(char*)"所在的洲");&lt;/p&gt;&#xD;
&lt;p&gt;pRootElement-&amp;gt;appendChild((IXMLDOMNode*)pComment); // 注释&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;pNode = pDoc-&amp;gt;createNode((_variant_t)(long)NODE_ELEMENT, (_bstr_t)(char*)"Continent", (_bstr_t)(char*)"");&lt;/p&gt;&#xD;
&lt;p&gt;pNode-&amp;gt;Puttext((_bstr_t)(char*)"Asia"); // pNode-&amp;gt;text = "Asia";&lt;/p&gt;&#xD;
&lt;p&gt;pRootElement-&amp;gt;appendChild(pNode); // 节点&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (4)创建节点&amp;lt;China&amp;gt;&amp;lt;Population&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;pComment = pDoc-&amp;gt;createComment((_bstr_t)(char*)"人口数量");&lt;/p&gt;&#xD;
&lt;p&gt;pRootElement-&amp;gt;appendChild((IXMLDOMNode*)pComment); // 注释&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;pElement = pDoc-&amp;gt;createElement((_bstr_t)(char*)"Population");&lt;/p&gt;&#xD;
&lt;p&gt;pAttrNode = pDoc-&amp;gt;createAttribute((_bstr_t)(char*)"Units");&lt;/p&gt;&#xD;
&lt;p&gt;pAttrNode-&amp;gt;Puttext((_bstr_t)(char*)"Million Person");&lt;/p&gt;&#xD;
&lt;p&gt;pElement-&amp;gt;setAttributeNode(pAttrNode); // 统计单位&lt;/p&gt;&#xD;
&lt;p&gt;pElement-&amp;gt;setAttribute((_bstr_t)(char*)"StatisticalYear", (_variant_t)(char*)"2000"); // 统计年份&lt;/p&gt;&#xD;
&lt;p&gt;pElement-&amp;gt;Puttext((_bstr_t)(char*)"1,296");&lt;/p&gt;&#xD;
&lt;p&gt;pRootElement-&amp;gt;appendChild(pElement); // 节点&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (5)创建节点&amp;lt;China&amp;gt;&amp;lt;Municipality&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;pComment = pDoc-&amp;gt;createComment((_bstr_t)(char*)"四个直辖市");&lt;/p&gt;&#xD;
&lt;p&gt;pRootElement-&amp;gt;appendChild((IXMLDOMNode*)pComment); // 注释&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;pNode = pDoc-&amp;gt;createNode((_variant_t)(long)NODE_ELEMENT, (_bstr_t)(char*)"Municipality", (_bstr_t)(char*)"");&lt;/p&gt;&#xD;
&lt;p&gt;pRootElement-&amp;gt;appendChild(pNode); // 节点&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (6)创建节点&amp;lt;China&amp;gt;&amp;lt;Municipality&amp;gt;&amp;lt;TianJin&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;pNode1 = pDoc-&amp;gt;createNode((_variant_t)(long)NODE_ELEMENT, (_bstr_t)(char*)"TianJin", (_bstr_t)(char*)"");&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// &amp;nbsp; &amp;nbsp;创建节点&amp;lt;China&amp;gt;&amp;lt;Municipality&amp;gt;&amp;lt;TianJin&amp;gt;&amp;lt;Area&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;pElement = pDoc-&amp;gt;createElement((_bstr_t)(char*)"Area");&lt;/p&gt;&#xD;
&lt;p&gt;pElement-&amp;gt;setAttribute((_bstr_t)(char*)"Units", (_variant_t)(char*)"Thousand Square kilometers"); // 统计单位&lt;/p&gt;&#xD;
&lt;p&gt;pElement-&amp;gt;Puttext((_bstr_t)(char*)"12");&lt;/p&gt;&#xD;
&lt;p&gt;pNode1-&amp;gt;appendChild((IXMLDOMNode*)pElement); // 节点&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// &amp;nbsp; &amp;nbsp;创建节点&amp;lt;China&amp;gt;&amp;lt;Municipality&amp;gt;&amp;lt;TianJin&amp;gt;&amp;lt;Population&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;pElement = pDoc-&amp;gt;createElement((_bstr_t)(char*)"Population");&lt;/p&gt;&#xD;
&lt;p&gt;pElement-&amp;gt;setAttribute((_bstr_t)(char*)"Units", (_variant_t)(char*)"Million Person"); // 统计单位&lt;/p&gt;&#xD;
&lt;p&gt;pElement-&amp;gt;setAttribute((_bstr_t)(char*)"StatisticalYear", (_variant_t)(char*)"2000"); // 统计年份&lt;/p&gt;&#xD;
&lt;p&gt;pElement-&amp;gt;Puttext((_bstr_t)(char*)"10.01");&lt;/p&gt;&#xD;
&lt;p&gt;pNode1-&amp;gt;appendChild((IXMLDOMNode*)pElement); // 节点&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;pNode-&amp;gt;appendChild(pNode1);&lt;/p&gt;&#xD;
&lt;p&gt;// (7)创建节点&amp;lt;China&amp;gt;&amp;lt;Municipality&amp;gt;&amp;lt;BeiJing&amp;gt;并插入&amp;lt;TianJin&amp;gt;前&lt;/p&gt;&#xD;
&lt;p&gt;pNode2 = pDoc-&amp;gt;createNode((_variant_t)(long)NODE_ELEMENT, (_bstr_t)(char*)"BeiJing", (_bstr_t)(char*)"");&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// &amp;nbsp; &amp;nbsp;创建节点&amp;lt;China&amp;gt;&amp;lt;Municipality&amp;gt;&amp;lt;BeiJing&amp;gt;&amp;lt;Area&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;pElement = pDoc-&amp;gt;createElement((_bstr_t)(char*)"Area");&lt;/p&gt;&#xD;
&lt;p&gt;pElement-&amp;gt;setAttribute((_bstr_t)(char*)"Units", (_variant_t)(char*)"Thousand Square kilometers"); // 统计单位&lt;/p&gt;&#xD;
&lt;p&gt;pElement-&amp;gt;Puttext((_bstr_t)(char*)"17");&lt;/p&gt;&#xD;
&lt;p&gt;pNode2-&amp;gt;appendChild((IXMLDOMNode*)pElement); // 节点&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// &amp;nbsp; &amp;nbsp;创建节点&amp;lt;China&amp;gt;&amp;lt;Municipality&amp;gt;&amp;lt;BeiJing&amp;gt;&amp;lt;Population&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;pElement = pDoc-&amp;gt;createElement((_bstr_t)(char*)"Population");&lt;/p&gt;&#xD;
&lt;p&gt;pElement-&amp;gt;setAttribute((_bstr_t)(char*)"Units", (_variant_t)(char*)"Million Person"); // 统计单位&lt;/p&gt;&#xD;
&lt;p&gt;pElement-&amp;gt;setAttribute((_bstr_t)(char*)"StatisticalYear", (_variant_t)(char*)"2000"); // 统计年份&lt;/p&gt;&#xD;
&lt;p&gt;pElement-&amp;gt;Puttext((_bstr_t)(char*)"13.82");&lt;/p&gt;&#xD;
&lt;p&gt;pNode2-&amp;gt;appendChild((IXMLDOMNode*)pElement); // 节点&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;pNode-&amp;gt;insertBefore(pNode2, (_variant_t)(IDispatch*)pNode1);&lt;/p&gt;&#xD;
&lt;p&gt;//&lt;/p&gt;&#xD;
&lt;p&gt;// (8)创建节点&amp;lt;China&amp;gt;&amp;lt;Municipality&amp;gt;&amp;lt;ShangHai&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (9)创建节点&amp;lt;China&amp;gt;&amp;lt;Municipality&amp;gt;&amp;lt;ChongQing&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;pDoc-&amp;gt;save((_variant_t)szXmlFile);&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;return EXIT_SUCCESS;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;===========================&lt;strong&gt;生成的china.xml文档内容：&lt;/strong&gt;======================================================&lt;/p&gt;&#xD;
&lt;p&gt;&lt;p&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;China&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!--所在的洲--&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Continent&amp;gt;Asia&amp;lt;/Continent&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!--人口数量--&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Population Units="Million Person" StatisticalYear="2000"&amp;gt;1,296&amp;lt;/Population&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!--四个直辖市--&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Municipality&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;BeiJing&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Area Units="Thousand Square kilometers"&amp;gt;17&amp;lt;/Area&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Population Units="Million Person" StatisticalYear="2000"&amp;gt;13.82&amp;lt;/Population&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;/BeiJing&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;TianJin&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Area Units="Thousand Square kilometers"&amp;gt;12&amp;lt;/Area&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Population Units="Million Person" StatisticalYear="2000"&amp;gt;10.01&amp;lt;/Population&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;/TianJin&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;ShangHai&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Area Units="Thousand Square kilometers"&amp;gt;6.4&amp;lt;/Area&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Population Units="Million Person" StatisticalYear="2000"&amp;gt;16.74&amp;lt;/Population&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;/ShangHai&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;ChongQing&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Area Units="Thousand Square kilometers"&amp;gt;84&amp;lt;/Area&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;Population Units="Million Person" StatisticalYear="2000"&amp;gt;30.90&amp;lt;/Population&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;/ChongQing&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;/Municipality&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;/China&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;=================================&lt;/p&gt;&#xD;
&lt;p&gt;&lt;p&gt;二．MsXml解析XML文档示例:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;p&gt;// XmlParsingDemo.cpp&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// 引入MSXML解析器&lt;/p&gt;&#xD;
&lt;p&gt;#import &amp;lt;msxml4.dll&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;using namespace MSXML2;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;class InitializeCom&lt;/p&gt;&#xD;
&lt;p&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;public:&lt;/p&gt;&#xD;
&lt;p&gt;InitializeCom() &amp;nbsp; &amp;nbsp;{ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CoInitialize(NULL); // Initializes the COM library &amp;nbsp; &amp;nbsp;}&lt;/p&gt;&#xD;
&lt;p&gt;~InitializeCom() { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CoUninitialize(); // Closes the COM library &amp;nbsp; &amp;nbsp;}&lt;/p&gt;&#xD;
&lt;p&gt;}InitCom;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;int main()&lt;/p&gt;&#xD;
&lt;p&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;char *szXmlFile = "D:\\china.xml"; //上篇创建的xml文档&lt;/p&gt;&#xD;
&lt;p&gt;IXMLDOMDocumentPtr pDoc = NULL; // xml文档&lt;/p&gt;&#xD;
&lt;p&gt;IXMLDOMNodeListPtr pNodeList = NULL; // 节点链表&lt;/p&gt;&#xD;
&lt;p&gt;IXMLDOMElementPtr pRootElement = NULL, pElement = NULL; // 根节点(元素)&lt;/p&gt;&#xD;
&lt;p&gt;IXMLDOMNodePtr pNode = NULL, pNode1 = NULL; // 节点&lt;/p&gt;&#xD;
&lt;p&gt;IXMLDOMNamedNodeMapPtr pAttrList = NULL; // 属性链表&lt;/p&gt;&#xD;
&lt;p&gt;IXMLDOMAttributePtr pAttrNode = NULL; // 属性&lt;/p&gt;&#xD;
&lt;p&gt;long lChilds, lAttr, i;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;HRESULT hr = pDoc.CreateInstance(__uuidof(DOMDocument40));&lt;/p&gt;&#xD;
&lt;p&gt;if (FAILED(hr))&lt;/p&gt;&#xD;
&lt;p&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;printf("无法创建DOMDocument40对象，请检查是否安装并初始化了MsXml Parser库！");&lt;/p&gt;&#xD;
&lt;p&gt;return EXIT_FAILURE;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;VARIANT_BOOL bXmlLoad = pDoc-&amp;gt;load((_variant_t)szXmlFile);&lt;/p&gt;&#xD;
&lt;p&gt;if (!bXmlLoad) // 加载失败&lt;/p&gt;&#xD;
&lt;p&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;printf("加载%s失败！\n", szXmlFile);&lt;/p&gt;&#xD;
&lt;p&gt;return EXIT_FAILURE;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (1)根节点&lt;/p&gt;&#xD;
&lt;p&gt;pRootElement = pDoc-&amp;gt;GetdocumentElement();&lt;/p&gt;&#xD;
&lt;p&gt;printf("root = %s\n", (char*)pRootElement-&amp;gt;GetnodeName()); // pRootElement-&amp;gt;nodeName&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (2)根节点的一级子节点&lt;/p&gt;&#xD;
&lt;p&gt;pNodeList = pRootElement-&amp;gt;GetchildNodes(); // pRootElement-&amp;gt;childNodes&lt;/p&gt;&#xD;
&lt;p&gt;lChilds = pNodeList-&amp;gt;Getlength(); // pNodeList-&amp;gt;length&lt;/p&gt;&#xD;
&lt;p&gt;for (i = 0; i &amp;lt; lChilds; i++)&lt;/p&gt;&#xD;
&lt;p&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;pNode = pNodeList-&amp;gt;Getitem(i); // pNodeList-&amp;gt;item[i]&lt;/p&gt;&#xD;
&lt;p&gt;if (pNode-&amp;gt;GetnodeType() != NODE_COMMENT) // 过滤注释节点&lt;/p&gt;&#xD;
&lt;p&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;printf("child[%d] of [%s]: [%s]\n", i ,(char*)pRootElement-&amp;gt;GetnodeName(), (char*)pNode-&amp;gt;GetnodeName());&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (3)统计文档中所有的&amp;lt;Population&amp;gt;节点&lt;/p&gt;&#xD;
&lt;p&gt;pNodeList = pDoc-&amp;gt;getElementsByTagName((_bstr_t)(char*)"Population");&lt;/p&gt;&#xD;
&lt;p&gt;lChilds = pNodeList-&amp;gt;Getlength();&lt;/p&gt;&#xD;
&lt;p&gt;printf("文档中[Population]共有%d个\n", lChilds);&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (4)根节点下的&amp;lt;Population&amp;gt;节点&lt;/p&gt;&#xD;
&lt;p&gt;pNode = pRootElement-&amp;gt;selectSingleNode((_bstr_t)(char*)"Population");&lt;/p&gt;&#xD;
&lt;p&gt;// 已知根节点为&amp;lt;China&amp;gt;时：pNode = pDoc-&amp;gt;selectSingleNode((_bstr_t)(char*)"China//Population");&lt;/p&gt;&#xD;
&lt;p&gt;printf("根节点下的[Population]子节点值为%s\n", (char*)pNode-&amp;gt;Gettext());&lt;/p&gt;&#xD;
&lt;p&gt;pAttrList = pNode-&amp;gt;Getattributes();&lt;/p&gt;&#xD;
&lt;p&gt;lAttr = pAttrList-&amp;gt;Getlength();&lt;/p&gt;&#xD;
&lt;p&gt;for (i = 0; i &amp;lt; lAttr; i++)&lt;/p&gt;&#xD;
&lt;p&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;pAttrNode = pAttrList-&amp;gt;Getitem(i);&lt;/p&gt;&#xD;
&lt;p&gt;printf("Attr[%d] of [%s]: %s = %s\n", i, (char*)pNode-&amp;gt;GetnodeName(), (char*)pAttrNode-&amp;gt;GetnodeName(), (char*)pAttrNode-&amp;gt;Gettext());&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (5)查找节点&amp;lt;Municipality&amp;gt;下的所有子节点&lt;/p&gt;&#xD;
&lt;p&gt;// "//"表示在任意一层寻找Municipality；"//*"查找&amp;lt;Municipality&amp;gt;&amp;lt;/Municipality&amp;gt;中的所有子节点&lt;/p&gt;&#xD;
&lt;p&gt;pNodeList = pDoc-&amp;gt;selectNodes((_bstr_t)(char*)"//Municipality//*"); // 这里可将pDoc换成pRootElement&lt;/p&gt;&#xD;
&lt;p&gt;while (pNode = pNodeList-&amp;gt;nextNode())&lt;/p&gt;&#xD;
&lt;p&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;printf("childs of [Municipality]: %s\n", (char*)pNode-&amp;gt;GetnodeName());&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (6)查找节点&amp;lt;Municipality&amp;gt;下的一级子节点&lt;/p&gt;&#xD;
&lt;p&gt;pNode = pRootElement-&amp;gt;selectSingleNode((_bstr_t)(char*)"Municipality");&lt;/p&gt;&#xD;
&lt;p&gt;pNodeList = pNode-&amp;gt;GetchildNodes();&lt;/p&gt;&#xD;
&lt;p&gt;lChilds = pNodeList-&amp;gt;Getlength();&lt;/p&gt;&#xD;
&lt;p&gt;for (i = 0; i &amp;lt; lChilds; i++)&lt;/p&gt;&#xD;
&lt;p&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;pNode1 = pNodeList-&amp;gt;Getitem(i); // pNodeList-&amp;gt;item[i]&lt;/p&gt;&#xD;
&lt;p&gt;printf("child[%d] of [Municipality]: %s\n", i, (char*)pNode1-&amp;gt;GetnodeName());&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;// (7)查询父、子、兄、弟节点&lt;/p&gt;&#xD;
&lt;p&gt;pNode = pRootElement-&amp;gt;selectSingleNode((_bstr_t)(char*)"//TianJin");&lt;/p&gt;&#xD;
&lt;p&gt;pNode1 = pNode-&amp;gt;GetparentNode(); // 父节点&lt;/p&gt;&#xD;
&lt;p&gt;printf("[TianJin]的父节点为[%s]\n", (char*)pNode1-&amp;gt;GetnodeName());&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;pNodeList = pNode-&amp;gt;GetchildNodes(); // 子节点&lt;/p&gt;&#xD;
&lt;p&gt;lChilds = pNodeList-&amp;gt;Getlength();&lt;/p&gt;&#xD;
&lt;p&gt;for (i = 0; i &amp;lt; lChilds; i++)&lt;/p&gt;&#xD;
&lt;p&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;pNode1 = pNodeList-&amp;gt;nextNode();&lt;/p&gt;&#xD;
&lt;p&gt;printf("child[%d] of [TianJin]: %s\n", i, (char*)pNode1-&amp;gt;GetnodeName());&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;pNode1 = pNode-&amp;gt;GetpreviousSibling(); // 兄节点&lt;/p&gt;&#xD;
&lt;p&gt;printf("[TianJin]的兄节点为[%s]\n", (char*)pNode1-&amp;gt;GetnodeName());&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;pNode1 = pNode-&amp;gt;GetnextSibling(); // 弟节点&lt;/p&gt;&#xD;
&lt;p&gt;printf("[TianJin]的弟节点为[%s]\n", (char*)pNode1-&amp;gt;GetnodeName());&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;return EXIT_SUCCESS;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;==================================================&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #ff6600"&gt;&lt;strong&gt;&lt;span&gt;运行结果如下：&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #ff6600"&gt;&lt;strong&gt;&lt;span&gt;root = China&lt;br /&gt;child[1] of &amp;lt;China&amp;gt;: &amp;lt;Continent&amp;gt;&lt;br /&gt;child[3] of &amp;lt;China&amp;gt;: &amp;lt;Population&amp;gt;&lt;br /&gt;child[5] of &amp;lt;China&amp;gt;: &amp;lt;Municipality&amp;gt;&lt;br /&gt;文档中&amp;lt;Population&amp;gt;共有5个&lt;br /&gt;根节点下的&amp;lt;Population&amp;gt;子节点值为1,296&lt;br /&gt;Attr[0] of &amp;lt;Population&amp;gt;: Units = Million Person&lt;br /&gt;Attr[1] of &amp;lt;Population&amp;gt;: StatisticalYear = 2000&lt;br /&gt;childs of &amp;lt;Municipality&amp;gt;: BeiJing&lt;br /&gt;childs of &amp;lt;Municipality&amp;gt;: Area&lt;br /&gt;childs of &amp;lt;Municipality&amp;gt;: Population&lt;br /&gt;childs of &amp;lt;Municipality&amp;gt;: TianJin&lt;br /&gt;childs of &amp;lt;Municipality&amp;gt;: Area&lt;br /&gt;childs of &amp;lt;Municipality&amp;gt;: Population&lt;br /&gt;childs of &amp;lt;Municipality&amp;gt;: ShangHai&lt;br /&gt;childs of &amp;lt;Municipality&amp;gt;: Area&lt;br /&gt;childs of &amp;lt;Municipality&amp;gt;: Population&lt;br /&gt;childs of &amp;lt;Municipality&amp;gt;: ChongQing&lt;br /&gt;childs of &amp;lt;Municipality&amp;gt;: Area&lt;br /&gt;childs of &amp;lt;Municipality&amp;gt;: Population&lt;br /&gt;child[0] of &amp;lt;Municipality&amp;gt;: BeiJing&lt;br /&gt;child[1] of &amp;lt;Municipality&amp;gt;: TianJin&lt;br /&gt;child[2] of &amp;lt;Municipality&amp;gt;: ShangHai&lt;br /&gt;child[3] of &amp;lt;Municipality&amp;gt;: ChongQing&lt;br /&gt;&amp;lt;TianJin&amp;gt;的父节点为&amp;lt;Municipality&amp;gt;&lt;br /&gt;child[0] of &amp;lt;TianJin&amp;gt;: Area&lt;br /&gt;child[1] of &amp;lt;TianJin&amp;gt;: Population&lt;br /&gt;&amp;lt;TianJin&amp;gt;的兄节点为&amp;lt;BeiJing&amp;gt;&lt;br /&gt;&amp;lt;TianJin&amp;gt;的弟节点为&amp;lt;ShangHai&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/areliang/aggbug/2254334.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/areliang/archive/2011/11/18/2254334.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/areliang/archive/2011/11/17/2252901.html</id><title type="text">MFC中的MainFrame Dlg,App,Doc,View的关系</title><summary type="text">MainFrame: 主框架类Dlg 是Dialog 的缩写，表示对话框本身App类就是这个SDI作为&amp;quot;程序&amp;quot;的入口，有点像c的Main函数，它不是从CWND中派生出来的。App表示应用程序本身。View表示视图类，负责显示数据，提供编辑数据、修改数据的功能。它是指编辑区里面的事就是那块白色的中间区域，负责绘制和响应一些消息Doc表示文档类，提供对数据的保存和加载。有点像数据库，保存着编辑数据，用于view的Redraw的时候用，还有保存文件。一般动态的编辑数据都放在Doc里面。他也不是从CWND中派生出来的，没有继承MessageBox函数，可以用AfxMessageBo</summary><published>2011-11-17T08:51:00Z</published><updated>2011-11-17T08:51:00Z</updated><author><name>On the way</name><uri>http://www.cnblogs.com/areliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/areliang/archive/2011/11/17/2252901.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/areliang/archive/2011/11/17/2252901.html"/><content type="html">&lt;p&gt;&lt;strong&gt;MainFrame&lt;/strong&gt;: 主框架类&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Dlg&lt;/strong&gt; 是Dialog 的缩写，表示对话框本身&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;App&lt;/strong&gt;类就是这个SDI作为"程序"的入口，有点像c的Main函数，它不是从CWND中派生出来的。App表示应用程序本身。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;View&lt;/strong&gt;表示视图类，负责显示数据，提供编辑数据、修改数据的功能。它是指编辑区里面的事就是那块白色的中间区域，负责绘制和响应一些消息&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Doc&lt;/strong&gt;表示文档类，提供对数据的保存和加载。有点像数据库，保存着编辑数据，用于view的Redraw的时候用，还有保存文件。&lt;/p&gt;&#xD;
&lt;p&gt;一般动态的编辑数据都放在Doc里面。他也不是从CWND中派生出来的，没有继承MessageBox函数，可以用AfxMessageBox函数。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;1)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;在&lt;/span&gt;&lt;span&gt;View&lt;/span&gt;&lt;span&gt;中获得&lt;/span&gt;&lt;span&gt;Doc&lt;/span&gt;&lt;span&gt;指针&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;在&lt;/span&gt;&lt;span&gt;App&lt;/span&gt;&lt;span&gt;中获得&lt;/span&gt;&lt;span&gt;MainFrame&lt;/span&gt;&lt;span&gt;指针&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;3)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;在&lt;/span&gt;&lt;span&gt;View&lt;/span&gt;&lt;span&gt;中获得&lt;/span&gt;&lt;span&gt;MainFrame&lt;/span&gt;&lt;span&gt;指针&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;4)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;获得&lt;/span&gt;&lt;span&gt;View&lt;/span&gt;&lt;span&gt;（已建立）指针&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;5)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;获得当前文档指针&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;6)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;获得状态栏与工具栏指针&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;7)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;获得状态栏与工具栏变量&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;8)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;在&lt;/span&gt;&lt;span&gt;Mainframe&lt;/span&gt;&lt;span&gt;获得菜单指针&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;9)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;在任何类中获得应用程序类&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;10)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;从文档类取得视图类的指针&lt;/span&gt;&lt;span&gt;(1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;11)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;在&lt;/span&gt;&lt;span&gt;App&lt;/span&gt;&lt;span&gt;中获得文档模板指针&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;12)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;从文档模板获得文档类指针&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;13)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;在文档类中获得文档模板指针&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;14)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;从文档类取得视图类的指针&lt;/span&gt;&lt;span&gt;(2)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;15)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;从一个视图类取得另一视图类的指针&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;VC&lt;/span&gt;&lt;span&gt;中编程对于刚刚开始学习的同学，最大的障碍和问题就是消息机制和指针获取与操作。其实这些内容基本上是每本&lt;/span&gt;&lt;span&gt;VC&lt;/span&gt;&lt;span&gt;学习工具书上必讲的内容，而且通过&lt;/span&gt;&lt;span&gt;MSDN&lt;/span&gt;&lt;span&gt;很多问题都能解决。下面文字主要是个人在编程中指针使用的一些体会，说的不当的地方请指正。一般我们使用的框架是&lt;/span&gt;&lt;span&gt;VC&lt;/span&gt;&lt;span&gt;提供的&lt;/span&gt;&lt;span&gt;Wizard&lt;/span&gt;&lt;span&gt;生成的&lt;/span&gt;&lt;span&gt;MFC&amp;nbsp;App&amp;nbsp;Wizard(exe)&lt;/span&gt;&lt;span&gt;框架，无论是多文档还是单文档，都存在指针获取和操作问题。下面这节内容主要是一般的框架，然后再讲多线程中的指针使用。使用到的类需要包含响应的头文件。首先一般获得本类&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;视，文档，对话框都支持&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;实例指针&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;，用&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;的目的，主要可以通过类中的函数向其他类或者函数中发指针，以便于在非本类中操作和使用本类中的功能。&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp;1&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;）&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;在&lt;/span&gt;&lt;strong&gt;&lt;span&gt;View&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;中获得&lt;/span&gt;&lt;strong&gt;&lt;span&gt;Doc&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;指针&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;CYouSDIDoc&amp;nbsp;&amp;nbsp;&amp;nbsp;*pDoc=GetDocument();&lt;/span&gt;&lt;span&gt;一个视只能有一个文档。&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;在&lt;/span&gt;&lt;strong&gt;&lt;span&gt;App&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;中获得&lt;/span&gt;&lt;strong&gt;&lt;span&gt;MainFrame&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;指针&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;CWinApp&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;中的&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_pMainWnd&lt;/span&gt;&lt;span&gt;变量就是&lt;/span&gt;&lt;span&gt;MainFrame&lt;/span&gt;&lt;span&gt;的指针&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;也可以：&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;CMainFrame&amp;nbsp;&amp;nbsp;&amp;nbsp;*pMain&amp;nbsp;&amp;nbsp;&amp;nbsp;=(CMainFrame&amp;nbsp;&amp;nbsp;&amp;nbsp;*)AfxGetMainWnd();&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;在&lt;/span&gt;&lt;strong&gt;&lt;span&gt;View&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;中获得&lt;/span&gt;&lt;strong&gt;&lt;span&gt;MainFrame&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;指针&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;CMainFrame&amp;nbsp;&amp;nbsp;&amp;nbsp;*pMain=(CmaimFrame&amp;nbsp;&amp;nbsp;&amp;nbsp;*)AfxGetApp()&amp;#8208;&amp;gt;m_pMainWnd;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;获得&lt;/span&gt;&lt;strong&gt;&lt;span&gt;View&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;（已建立）指针&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;CMainFrame&amp;nbsp;&amp;nbsp;&amp;nbsp;*pMain=(CmaimFrame&amp;nbsp;&amp;nbsp;&amp;nbsp;*)AfxGetApp()&amp;#8208;&amp;gt;m_pMainWnd;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;CyouView&amp;nbsp;&amp;nbsp;&amp;nbsp;*pView=(CyouView&amp;nbsp;&amp;nbsp;&amp;nbsp;*)pMain&amp;#8208;&amp;gt;GetActiveView();&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;获得当前文档指针&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;CDocument&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;pCurrentDoc&amp;nbsp;&amp;nbsp;&amp;nbsp;=(CFrameWnd&amp;nbsp;&amp;nbsp;&amp;nbsp;*)m_pMainWnd&amp;#8208;&amp;gt;GetActiveDocument();&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;获得状态栏与工具栏指针&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;CStatusBar&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;pStatusBar&lt;/span&gt;&lt;span&gt;＝&lt;/span&gt;&lt;span&gt;(CStatusBar&amp;nbsp;&amp;nbsp;&amp;nbsp;*)AfxGetMainWnd()&amp;#8208;&amp;gt;GetDescendantWindow(AFX_IDW_STATUS_BAR);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;CToolBar&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;pToolBar=(CtoolBar&amp;nbsp;&amp;nbsp;&amp;nbsp;*)AfxGetMainWnd()&amp;#8208;&amp;gt;GetDescendantWindow(AFX_IDW_TOOLBAR);&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;如果框架中加入工具栏和状态栏变量还可以这样&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;(CMainFrame&amp;nbsp;&amp;nbsp;&amp;nbsp;*)GetParent()&amp;#8208;&amp;gt;m_wndToolBar;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;(CMainFrame&amp;nbsp;&amp;nbsp;&amp;nbsp;*)GetParent()&amp;#8208;&amp;gt;m_wndStatusBar;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;在&lt;/span&gt;&lt;strong&gt;&lt;span&gt;Mainframe&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;获得菜单指针&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;CMenu&amp;nbsp;&amp;nbsp;&amp;nbsp;*pMenu=m_pMainWnd&amp;#8208;&amp;gt;GetMenu();&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;在任何类中获得应用程序类&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;用&lt;/span&gt;&lt;span&gt;MFC&lt;/span&gt;&lt;span&gt;全局函数&lt;/span&gt;&lt;span&gt;AfxGetApp()&lt;/span&gt;&lt;span&gt;获得。&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;10)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;从文档类取得视图类的指针&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;我是从&lt;/span&gt;&lt;span&gt;http://download.cqcnc.com/soft/program/article/vc/vc405.html&lt;/span&gt;&lt;span&gt;学到的，&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;从文档获得视图类指针目的一般为了控制同一文档的多个视图的定位问题，我的体会&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;特别是文字处理&lt;/span&gt;&lt;span&gt;CEditView&lt;/span&gt;&lt;span&gt;当产生多个视图类时，这个功能是非常需要的。&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;CDocument&lt;/span&gt;&lt;span&gt;类提供了两个函数用于视图类的定位：&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;GetFirstViewPosition()&lt;/span&gt;&lt;span&gt;和&lt;/span&gt;&lt;span&gt;GetNextView()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;virtual&amp;nbsp;&amp;nbsp;&amp;nbsp;POSITION&amp;nbsp;&amp;nbsp;&amp;nbsp;GetFirstViewPosition()&amp;nbsp;&amp;nbsp;&amp;nbsp;const;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;virtual&amp;nbsp;&amp;nbsp;&amp;nbsp;CView*&amp;nbsp;&amp;nbsp;&amp;nbsp;GetNextView(POSITION&amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rPosition)&amp;nbsp;&amp;nbsp;&amp;nbsp;const;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;注意：&lt;/span&gt;&lt;span&gt;GetNextView()&lt;/span&gt;&lt;span&gt;括号中的参数用的是引用方式，因此执行后值可能改变。&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;GetFirstViewPosition()&lt;/span&gt;&lt;span&gt;用于返回第一个视图位置（返回的并非视图类指针，而是一&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;个&lt;/span&gt;&lt;span&gt;POSITION&lt;/span&gt;&lt;span&gt;类型值），&lt;/span&gt;&lt;span&gt;GetNextView()&lt;/span&gt;&lt;span&gt;有两个功能：返回下一个视图类的指针以及用&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;引用调用的方式来改变传入的&lt;/span&gt;&lt;span&gt;POSITION&lt;/span&gt;&lt;span&gt;类型参数的值。很明显，在&lt;/span&gt;&lt;span&gt;Test&lt;/span&gt;&lt;span&gt;程序中，只有&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;一个视图类，因此只需将这两个函数调用一次即可得到&lt;/span&gt;&lt;span&gt;CTestView&lt;/span&gt;&lt;span&gt;的指针如下（需定&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;义一个&lt;/span&gt;&lt;span&gt;POSITION&lt;/span&gt;&lt;span&gt;结构变量来辅助操作）：&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;CTestView*&amp;nbsp;&amp;nbsp;&amp;nbsp;pTestView;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;POSITION&amp;nbsp;&amp;nbsp;&amp;nbsp;pos=GetFirstViewPosition();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;pTestView=GetNextView(pos);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;这样，便可到了&lt;/span&gt;&lt;span&gt;CTestView&lt;/span&gt;&lt;span&gt;类的指针&lt;/span&gt;&lt;span&gt;pTestView.&lt;/span&gt;&lt;span&gt;执行完几句后，变量&lt;/span&gt;&lt;span&gt;pos=NULL,&lt;/span&gt;&lt;span&gt;因为没&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;有下一个视图类，自然也没有下一个视图类的&lt;/span&gt;&lt;span&gt;POSITION.&lt;/span&gt;&lt;span&gt;但是这几条语句太简单，不&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;具有太强的通用性和安全特征；当象前面说的那样，当要在多个视图为中返回某个指&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;定类的指针时，我们需要遍历所有视图类，直到找到指定类为止。判断一个类指针指&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;向的是否某个类的实例时，可用&lt;/span&gt;&lt;span&gt;IsKindOf()&lt;/span&gt;&lt;span&gt;成员函数时行检查，如：&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pView&amp;#8208;&amp;gt;IsKindOf(RUNTIME_CLASS(CTestView));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;即可检查&lt;/span&gt;&lt;span&gt;pView&lt;/span&gt;&lt;span&gt;所指是否是&lt;/span&gt;&lt;span&gt;CTestView&lt;/span&gt;&lt;span&gt;类。&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;有了以上基础，我们已经可以从文档类取得任何类的指针。为了方便，我们将其作&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;为一个文档类的成员函数，它有一个参数，表示要获得哪个类的指针。实现如下：&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;其中用了两次视图类的成员函数&lt;/span&gt;&lt;span&gt;IsKindOf()&lt;/span&gt;&lt;span&gt;来判断，是因为退出&lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;循环有三种&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;可能：&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;1.pos&lt;/span&gt;&lt;span&gt;为&lt;/span&gt;&lt;span&gt;NULL&lt;/span&gt;&lt;span&gt;，即已经不存在下一个视图类供操作；&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;2.pView&lt;/span&gt;&lt;span&gt;已符合要求。&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&lt;span&gt;和&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;同是满足。这是因为&lt;/span&gt;&lt;span&gt;GetNextView()&lt;/span&gt;&lt;span&gt;的功能是将当前视图指针改变成一个视图&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;的位置同时返回当前视图指针，因此&lt;/span&gt;&lt;span&gt;pos&lt;/span&gt;&lt;span&gt;是&lt;/span&gt;&lt;span&gt;pView&lt;/span&gt;&lt;span&gt;的下一个视图类的&lt;/span&gt;&lt;span&gt;POSITION,&lt;/span&gt;&lt;span&gt;完全&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;有可能既是&lt;/span&gt;&lt;span&gt;pos==NULL&lt;/span&gt;&lt;span&gt;又是&lt;/span&gt;&lt;span&gt;pView&lt;/span&gt;&lt;span&gt;符合需要。当所需的视图是最后一个视图是最后一&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;个视图类时就如引。因此需采用两次判断。&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;使用该函数应遵循如下格式（以取得&lt;/span&gt;&lt;span&gt;CTestView&lt;/span&gt;&lt;span&gt;指针为例）：&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;CTestView*&amp;nbsp;&amp;nbsp;&amp;nbsp;pTestView=(CTestView*)GetView(RUNTIME_CLASS(CTestView));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;RUNTIME_CLASS&lt;/span&gt;&lt;span&gt;是一个宏，可以简单地理解它的作用：将类的名字转化为&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;CRuntimeClass&lt;/span&gt;&lt;span&gt;为指针。至于强制类型转换也是为了安全特性考虑的，因为从同一个&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;基类之间的指针类型是互相兼容的。这种强制类型转换也许并不必要，但能避免一&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;些可能出现的麻烦。&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;3.&lt;/span&gt;&lt;span&gt;从一个视图类取得另一视图类的指针&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;综合&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;和&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;，很容易得出视图类之间互相获得&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;指针的方法：就是用文档类作中转，先用&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;的方法得到文档类的指针，再用&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;的方法，&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;以文档类的视图定位函数取得另一个视图类。同样，可以实现成一个函数：&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;（假设要从&lt;/span&gt;&lt;span&gt;CTestAView&lt;/span&gt;&lt;span&gt;中取得指向其它视图类的指针）&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;这个函数和&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;中的&lt;/span&gt;&lt;span&gt;GetView()&lt;/span&gt;&lt;span&gt;相比，一是多了第一句以取得文档类指针，二是在&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;GetFirstViewPosition()&lt;/span&gt;&lt;span&gt;和&lt;/span&gt;&lt;span&gt;GetNextView()&lt;/span&gt;&lt;span&gt;前加上了文档类指针，以表示它们是文档&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;类成员函数。有了此函数；当要从&lt;/span&gt;&lt;span&gt;CTestAView&lt;/span&gt;&lt;span&gt;中取得&lt;/span&gt;&lt;span&gt;CTestBView&lt;/span&gt;&lt;span&gt;的指针时，只需如&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;下：&lt;/span&gt;&lt;span&gt;CTestBView*&amp;nbsp;&amp;nbsp;&amp;nbsp;pTestbView=(CTestView*)GetView(RUNTIME_CLASS(CTestBView));&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/areliang/aggbug/2252901.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/areliang/archive/2011/11/17/2252901.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/areliang/archive/2011/11/17/2252255.html</id><title type="text">于typedef的用法总结</title><summary type="text">不管实在C还是C++代码中，typedef这个词都不少见，当然出现频率较高的还是在C代码中。typedef与#define有些相似，但更多的是不同，特别是在一些复杂的用法上，就完全不同了，看了网上一些C/C++的学习者的博客，其中有一篇关于typedef的总结还是很不错，由于总结的很好，我就不加修改的引用过来了，以下是引用的内容(红色部分是我自己写的内容)。 用途一：定义一种类型的别名，而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如：char* pa, pb;// 这多数不符合我们的意图，它只声明了一个指向字符变量的指针，// 和一个字符变量；以下则可行：typedef char</summary><published>2011-11-17T02:39:00Z</published><updated>2011-11-17T02:39:00Z</updated><author><name>On the way</name><uri>http://www.cnblogs.com/areliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/areliang/archive/2011/11/17/2252255.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/areliang/archive/2011/11/17/2252255.html"/><content type="html">不管实在C还是C++代码中，typedef这个词都不少见，当然出现频率较高的还是在C代码中。typedef与#define有些相似，但更多的是不同，特别是在一些复杂的用法上，就完全不同了，看了网上一些C/C++的学习者的博客，其中有一篇关于typedef的总结还是很不错，由于总结的很好，我就不加修改的引用过来了，以下是引用的内容(&lt;span style="color: red"&gt;红色部分是我自己写的内容&lt;/span&gt;)。 &#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;用途一：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体"&gt;定义一种类型的别名，而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;char* pa, pb;&amp;nbsp;// &lt;span style="font-family: 宋体"&gt;这多数不符合我们的意图，它只声明了一个指向字符变量的指针，&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;// &lt;span style="font-family: 宋体"&gt;和一个字符变量；&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体"&gt;以下则可行：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;typedef char* PCHAR; &lt;/p&gt;&#xD;
&lt;p align="left"&gt;PCHAR pa, pb;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="color: red" align="left"&gt;这种用法很有用，特别是char* pa, pb的定义，初学者往往认为是定义了两个字符型指针，其实不是，而用typedef char* PCHAR就不会出现这样的问题，减少了错误的发生。&lt;/p&gt;&#xD;
&lt;p style="color: red" align="left"&gt;&lt;span style="color: #333300"&gt;&lt;span style="color: #333300"&gt;用途二:&lt;br /&gt;用在旧的C代码中，帮助struct。以前的代码中，声明struct新对象时，必须要带上&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;struct，即形式为： struct 结构名对象名，如：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;struct tagPOINT1&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int x; &lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int y; &lt;br /&gt;};&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;struct tagPOINT1 p1;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;而在C++中，则可以直接写：结构名对象名，即：tagPOINT1 p1;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;typedef struct tagPOINT&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int x;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int y;&lt;br /&gt;}POINT;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;POINT p1; // 这样就比原来的方式少写了一个struct，比较省事，尤其在大量使用的时&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;候,或许，在C++中，typedef的这种用途二不是很大，但是理解了它，对掌握以前的旧代&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;码还是有帮助的，毕竟我们在项目中有可能会遇到较早些年代遗留下来的代码。&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;用途三：&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;用typedef来定义与平台无关的类型。&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;比如定义一个叫 REAL 的浮点类型，在目标平台一上，让它表示最高精度的类型为：&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;typedef long double REAL;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;在不支持 long double 的平台二上，改为：&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;typedef double REAL;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;在连 double 都不支持的平台三上，改为：&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;typedef float REAL;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;也就是说，当跨平台时，只要改下 typedef 本身就行，不用对其他源码做任何修改。&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;标准库就广泛使用了这个技巧，比如size_t。另外，因为typedef是定义了一种类型的新别名，不是简单的字符串替换，所以它比宏来得稳健。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff0000"&gt;&amp;nbsp;这个优点在我们写代码的过程中可以减少不少代码量哦！&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #ff0000"&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;用途四： &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;为复杂的声明定义一个新的简单的别名。方法是：在原来的声明里逐步用别名替换一部&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;分复杂声明，如此循环，把带变量名的部分留到最后替换，得到的就是原声明的最简化&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;版。举例：&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;原声明：void (*b[10]) (void (*)());&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;变量名为b，先替换右边部分括号里的，pFunParam为别名一：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;typedef void (*pFunParam)();&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;再替换左边的变量b，pFunx为别名二：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;typedef void (*pFunx)(pFunParam);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;原声明的最简化版：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;pFunx b[10];&lt;br /&gt;&amp;nbsp;&lt;br /&gt;原声明：doube(*)() (*e)[9];&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;变量名为e，先替换左边部分，pFuny为别名一：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;typedef double(*pFuny)();&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;再替换右边的变量e，pFunParamy为别名二&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;typedef pFuny (*pFunParamy)[9];&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;原声明的最简化版：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;pFunParamy e;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;理解复杂声明可用的&amp;#8220;右左法则&amp;#8221;：从变量名看起，先往右，再往左，碰到一个圆括号&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;就调转阅读的方向；括号内分析完就跳出括号，还是按先右后左的顺序，如此循环，直&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;到整个声明分析完。举例：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;int (*func)(int *p);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;首先找到变量名func，外面有一对圆括号，而且左边是一个*号，这说明func是一个指针&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;；然后跳出这个圆括号，先看右边，又遇到圆括号，这说明(*func)是一个函数，所以&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;func是一个指向这类函数的指针，即函数指针，这类函数具有int*类型的形参，返回值&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;类型是int。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;int (*func[5])(int *);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;func右边是一个[]运算符，说明func是具有5个元素的数组；func的左边有一个*，说明&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;func的元素是指针（注意这里的*不是修饰func，而是修饰func[5]的，原因是[]运算符&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;优先级比*高，func先跟[]结合）。跳出这个括号，看右边，又遇到圆括号，说明func数&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;组的元素是函数类型的指针，它指向的函数具有int*类型的形参，返回值类型为int。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #ff0000"&gt;&lt;span style="color: #ff0000"&gt;这种用法是比较复杂的，出现的频率也不少，往往在看到这样的用法却不能理解，相信以上的解释能有所帮助。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;*****以上为参考部分，以下为本人领悟部分*****&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;使用示例：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;1.比较一：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;#include &amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;using namespace std;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;typedef int (*A) (char, char);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;int ss(char a, char b)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"功能1"&amp;lt;&amp;lt;endl;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;a&amp;lt;&amp;lt;endl;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;b&amp;lt;&amp;lt;endl;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;int bb(char a, char b)&lt;br /&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"功能2"&amp;lt;&amp;lt;endl;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;b&amp;lt;&amp;lt;endl;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;a&amp;lt;&amp;lt;endl;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;void main()&lt;br /&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; A a;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = ss;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a('a','b');&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = bb;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a('a', 'b');&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;2.比较二：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;typedef int (A) (char, char);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;void main()&lt;br /&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; A *a;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = ss;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a('a','b');&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = bb;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a('a','b');&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;两个程序的结果都一样：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;功能1&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;a&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;b&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;功能2&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;b&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;a&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;/span&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;*****以下是参考部分*****&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;参考自：http://blog.hc360.com/portal/personShowArticle.do?articleId=57527&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;typedef 与 #define的区别：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;案例一：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;通常讲，typedef要比#define要好，特别是在有指针的场合。请看例子：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;typedef char *pStr1;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;#define pStr2 char *;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;pStr1 s1, s2;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;pStr2 s3, s4;&lt;br /&gt;在上述的变量定义中，s1、s2、s3都被定义为char *，而s4则定义成了char，不是我们&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;所预期的指针变量，根本原因就在于#define只是简单的字符串替换而typedef则是为一&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;个类型起新名字。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;案例二：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;下面的代码中编译器会报一个错误，你知道是哪个语句错了吗？&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;typedef char * pStr;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;char string[4] = "abc";&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;const char *p1 = string;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;const pStr p2 = string;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;p1++;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;p2++;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;　　是p2++出错了。这个问题再一次提醒我们：typedef和#define不同，它不是简单的&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;文本替换。上述代码中const pStr p2并不等于const char * p2。const pStr p2和&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;const long x本质上没有区别，都是对变量进行只读限制，只不过此处变量p2的数据类&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;&lt;span style="color: #003300"&gt;型是我们自己定义的而不是系统固有类型而已。因此，const pStr p2的含义是：限定数&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #003300"&gt;据类型为char *的变量p2为只读，因此p2++错误。&lt;span style="color: #ff0000"&gt;虽然作者在这里已经解释得很清楚了，可我在这个地方仍然还是糊涂的，真的希望哪位高手能帮忙指点一下，特别是这一句&amp;#8220;只不过此处变量p2的数据类型是我们自己定义的而不是系统固有类型而已&amp;#8221;，难道自己定义的类型前面用const修饰后，就不能执行更改运算，而系统定义的类型却可以？&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span id="comment_body_1766837" &gt;刚刚看到楼主写的文章，不错。最后你那个问题：&lt;br /&gt;const char *p1 = string; 你可以这样理解：(const char) *p1 = string, p1是一个指针，指向const char的东西，这个东西就是string(string是一个字符数组的首地址，它的地址声明后肯定是const的，除非该数组销毁)，但是p1是一个指针变量，它是可以递增的，即你看到的p1++，它可以完成从数组的来遍历数组的目的。&lt;br /&gt;&lt;br /&gt;而const pStr p2 = string;是这样的：由于p2不是指针，const直接修饰到了p2,即现在的p2是常量了，它的类型是pStr(我们自己定义的类型)，相当于const int p2, const long p2等等，const都是直接修饰p2的，只不过int，long是系统类型，而pStr是我们定义的类型。为什么会出现这种效果了，就是因为typedef,它把char *定义成一个复合的类型，要从整体上来理解语义，而不是字符替换后来理解语义。&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html"&gt;http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/areliang/aggbug/2252255.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/areliang/archive/2011/11/17/2252255.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/areliang/archive/2011/11/16/2251573.html</id><title type="text">C++/CLI与C#常用语法对比</title><summary type="text">Kenny Kerr 一篇名为C++: The Most Powerful Language for .NET Framework Programming文章中的对比表，十分清晰的展示了版本2语言中设计的简洁和与原生语言的接近。值得参考：描述C++/CLIC#创建引用类型的对象ReferenceType^ h = gcnew ReferenceType;ReferenceType h = new ReferenceType();创建值类型的对象ValueType v(3, 4);ValueType v = new ValueType(3, 4);引用类型在堆栈上ReferenceType h;</summary><published>2011-11-16T09:52:00Z</published><updated>2011-11-16T09:52:00Z</updated><author><name>On the way</name><uri>http://www.cnblogs.com/areliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/areliang/archive/2011/11/16/2251573.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/areliang/archive/2011/11/16/2251573.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: black; font-size: 12pt"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10.5pt"&gt;&lt;strong&gt;Kenny Kerr&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10.5pt"&gt; 一篇名为&lt;span style="font-family: Verdana; color: black"&gt;&lt;span style="color: #003399"&gt;C++: The Most Powerful Language for .NET Framework Programming&lt;/span&gt;&lt;/span&gt;文章中的对比表，十分清晰的展示了版本2语言中设计的简洁和与原生语言的接近。值得参考：&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体; color: black; font-size: 12pt"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;table style="width: 100%" border="1" cellpadding="0" width="100%" border-color="#000000"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 25%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="25%"&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;描述&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 37%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="37%"&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;C++/CLI&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 38%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="38%"&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;C#&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 25%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="25%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;创建引用类型的对象&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 37%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="37%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;ReferenceType^ h = gcnew ReferenceType;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 38%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="38%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;ReferenceType h = new ReferenceType();&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 25%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="25%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;创建值类型的对象&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 37%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="37%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;ValueType v(3, 4);&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 38%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="38%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;ValueType v = new ValueType(3, 4);&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 25%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="25%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;引用类型在堆栈上&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 37%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="37%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;ReferenceType h;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 38%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="38%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;N/A&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 25%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="25%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;调用&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;Dispose&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;方法&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 37%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="37%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;ReferenceType^ h = gcnew ReferenceType; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 7.5pt 0cm" align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;delete h;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 38%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="38%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;ReferenceType h = new ReferenceType(); &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 7.5pt 0cm" align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;((IDisposable)h).Dispose();&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 25%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="25%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;实现&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;Dispose&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;方法&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 37%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="37%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;~TypeName() {}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 38%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="38%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;void IDisposable.Dispose() {}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 25%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="25%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;实现&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;Finalize&lt;/span&gt;&lt;/strong&gt; &lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;方法&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 37%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="37%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;!TypeName() {}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 38%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="38%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;~TypeName() {}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 25%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="25%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;装箱（&lt;/span&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;Boxing&lt;/span&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 37%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="37%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;int^ h = 123;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 38%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="38%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;object h = 123;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 25%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="25%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;拆箱（&lt;/span&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;Unboxing&lt;/span&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;）&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 37%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="37%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;int^ hi = 123; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 7.5pt 0cm" align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;int c = *hi;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 38%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="38%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;object h = 123; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 7.5pt 0cm" align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;int i = (int) h;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 25%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="25%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;定义引用类型&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 37%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="37%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;ref class ReferenceType {}; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 7.5pt 0cm" align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;ref struct ReferenceType {};&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 38%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="38%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;class ReferenceType {}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 25%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="25%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;定义值类型&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 37%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="37%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;value class ValueType {}; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 7.5pt 0cm" align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;value struct ValueType {};&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 38%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="38%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;struct ValueType {}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 25%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="25%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;使用属性&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 37%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="37%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;h.Prop = 123; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 7.5pt 0cm" align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;int v = h.Prop;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 38%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="38%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;h.Prop = 123; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left; margin: 7.5pt 0cm" align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;int v = h.Prop;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 25%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="25%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 宋体; color: black; font-size: 10pt"&gt;定义属性&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 37%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="37%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;property String^ Name &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; String^ get()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return m_value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void set(String^ value)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_value = value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: red; border-left: #ece9d8; padding-bottom: 0.75pt; background-color: transparent; padding-left: 0.75pt; width: 38%; padding-right: 0.75pt; border-top: #ece9d8; border-right: #ece9d8; padding-top: 0.75pt" valign="top" width="38%"&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: Verdana; color: black; font-size: 10pt"&gt;string Name &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return m_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_name = value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://www.cnblogs.com/areliang/aggbug/2251573.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/areliang/archive/2011/11/16/2251573.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/areliang/archive/2011/11/16/2251480.html</id><title type="text">理解lvalue和rvalue</title><summary type="text">Lvalues and RvaluesAnobjectis a region of storage that can be examined and stored into. Anlvalueis an expression that refers to such an object. An lvalue does not necessarily permit modification of the object it designates. For example, aconstobject is an lvalue that cannot be modified. The termmodi</summary><published>2011-11-16T08:58:00Z</published><updated>2011-11-16T08:58:00Z</updated><author><name>On the way</name><uri>http://www.cnblogs.com/areliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/areliang/archive/2011/11/16/2251480.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/areliang/archive/2011/11/16/2251480.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: arial, helvetica"&gt;&lt;a name="HDRLVALUE"&gt;&lt;font face=""&gt;Lvalues and Rvalues&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a name="IDX3206"&gt;&lt;/a&gt;&lt;a name="IDX3207"&gt;&lt;/a&gt;&lt;a name="IDX3208"&gt;&lt;/a&gt;&lt;a name="IDX3209"&gt;&lt;/a&gt;&lt;a name="IDX3210"&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;An&amp;nbsp;&lt;em&gt;object&lt;/em&gt;&amp;nbsp;is a region of storage that can be examined and stored into. An&amp;nbsp;&lt;em&gt;lvalue&lt;/em&gt;&amp;nbsp;is an expression that refers to such an object. An lvalue does not necessarily permit modification of the object it designates. For example, a&amp;nbsp;&lt;strong&gt;const&lt;/strong&gt;&amp;nbsp;object is an lvalue that cannot be modified. The term&lt;em&gt;modifiable lvalue&lt;/em&gt;&amp;nbsp;is used to emphasize that the lvalue allows the designated object to be changed as well as examined. The following object types are lvalues, but not modifiable lvalues:&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;An array type&lt;/li&gt;&lt;li&gt;An incomplete type&lt;/li&gt;&lt;li&gt;A&amp;nbsp;&lt;strong&gt;const&lt;/strong&gt;-qualified type&lt;/li&gt;&lt;li&gt;An object is a structure or union type and one of its members has a&amp;nbsp;&lt;strong&gt;const&lt;/strong&gt;-qualified type&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;p&gt;Because these lvalues are not modifiable, they cannot appear on the left side of an assignment statement.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a name="IDX3211"&gt;&lt;/a&gt;&lt;a name="IDX3212"&gt;&lt;/a&gt;&lt;a name="IDX3213"&gt;&lt;/a&gt;The term&amp;nbsp;&lt;em&gt;rvalue&lt;/em&gt;&amp;nbsp;refers to a data value that is stored at some address in memory. An&amp;nbsp;&lt;em&gt;rvalue&lt;/em&gt;&amp;nbsp;is an expression that cannot have a value assigned to it. Both a literal constant and a variable can serve as an rvalue. When an lvalue appears in a context that requires an rvalue, the lvalue is implicitly converted to an rvalue. The reverse, however, is not true: an rvalue cannot be converted to an lvalue. Rvalues always have complete types or the void type.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="C" src="http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/topic/com.ibm.vacpp6m.doc/language/images/ngclang.gif" /&gt;&amp;nbsp;&lt;a name="IDX3214"&gt;&lt;/a&gt;ISO C defines a&amp;nbsp;&lt;em&gt;function designator&lt;/em&gt;&amp;nbsp;as an expression that has function type A function designator is distinct from an object type or an lvalue. It can be the name of a function or the result of dereferencing a function pointer. The C language also differentiates between its treatment of a function pointer and an object pointer.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="C++" src="http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/topic/com.ibm.vacpp6m.doc/language/images/ngcpp.gif" /&gt;&amp;nbsp;&lt;a name="IDX3215"&gt;&lt;/a&gt;On the other hand, in C++, a function call that returns a reference is an lvalue. Otherwise, a function call is an rvalue expression. In C++, every expression produces an&amp;nbsp;&lt;em&gt;lvalue&lt;/em&gt;, an&amp;nbsp;&lt;em&gt;rvalue&lt;/em&gt;, or no value.&lt;/p&gt;&#xD;
&lt;p&gt;In both C and C++, certain operators require lvalues for some of their operands. The table below lists these operators and additional constraints on their usage.&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;table border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;th id="COLSPEC0" valign="top" width="44%" align="left"&gt;Operator&lt;/th&gt;&#xD;
&lt;th id="COL1" valign="top" width="56%" align="left"&gt;Requirement&lt;/th&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="44%" align="left"&gt;&lt;strong&gt;&amp;amp;&lt;/strong&gt;&amp;nbsp;(unary)&lt;/td&gt;&#xD;
&lt;td valign="top" width="56%" align="left"&gt;Operand must be an lvalue.&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="44%" align="left"&gt;&lt;strong&gt;++&lt;/strong&gt;&amp;nbsp;&lt;strong&gt;--&lt;/strong&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="56%" align="left"&gt;Operand must be an lvalue. This applies to both prefix and postfix forms.&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="44%" align="left"&gt;&lt;strong&gt;= += -= *= %= &amp;lt;&amp;lt;= &amp;gt;&amp;gt;= &amp;amp;= ^= |=&lt;/strong&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="56%" align="left"&gt;Left operand must be an lvalue.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&#xD;
&lt;p&gt;For example, all assignment operators evaluate their right operand and assign that value to their left operand. The left operand must be a modifiable lvalue or a reference to a modifiable object.&lt;/p&gt;&#xD;
&lt;p&gt;The address operator (&lt;tt&gt;&amp;amp;&lt;/tt&gt;) requires an lvalue as an operand while the increment (&lt;tt&gt;++&lt;/tt&gt;) and the decrement (&lt;tt&gt;--&lt;/tt&gt;) operators require a modifiable lvalue as an operand. The following example shows expressions and their corresponding lvalues.&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;table border="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;th id="COLSPEC0" valign="top" width="29%" align="left"&gt;Expression&lt;/th&gt;&#xD;
&lt;th id="COL1" valign="top" width="71%" align="left"&gt;Lvalue&lt;/th&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="29%" align="left"&gt;&lt;tt&gt;x = 42&lt;/tt&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="71%" align="left"&gt;&lt;tt&gt;x&lt;/tt&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="29%" align="left"&gt;&lt;tt&gt;*ptr = newvalue&lt;/tt&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="71%" align="left"&gt;&lt;tt&gt;*ptr&lt;/tt&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="29%" align="left"&gt;&lt;tt&gt;a++&lt;/tt&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="71%" align="left"&gt;&lt;tt&gt;a&lt;/tt&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="29%" align="left"&gt;&lt;img alt="C++" src="http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/topic/com.ibm.vacpp6m.doc/language/images/ngcpp.gif" /&gt;&lt;tt&gt;int&amp;amp; f()&lt;/tt&gt;&amp;nbsp;&lt;br /&gt;&lt;/td&gt;&#xD;
&lt;td valign="top" width="71%" align="left"&gt;The function call to&amp;nbsp;&lt;tt&gt;f()&lt;/tt&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="Mac OS X" src="http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/topic/com.ibm.vacpp6m.doc/language/images/ngmacosx.gif" /&gt;&amp;nbsp;&lt;img alt="C" src="http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/topic/com.ibm.vacpp6m.doc/language/images/ngclang.gif" /&gt;&amp;nbsp;The remainder of this section is platform-specific and pertains to C only.&lt;/p&gt;&#xD;
&lt;p&gt;When compiled with the GNU C language extensions enabled, compound expressions, conditional expressions, and casts are allowed as lvalues, provided that their operands are lvalues. The use of this language extension is deprecated for C++ code.&lt;/p&gt;&#xD;
&lt;p&gt;A compound expression can be assigned if the last expression in the sequence is an lvalue. The following expressions are equivalent:&lt;/p&gt;&lt;pre&gt;(x + 1, y) *= 42; x + 1, (y *=42);&lt;/pre&gt;&#xD;
&lt;p&gt;The address operator can be applied to a compound expression, provided the last expression in the sequence is an lvalue. The following expressions are equivalent:&lt;/p&gt;&lt;pre&gt;&amp;amp;(x + 1, y); x + 1, &amp;amp;y;&lt;/pre&gt;&#xD;
&lt;p&gt;A conditional expression can be a valid lvalue if its type is not void and both of its branches for true and false are valid lvalues. Casts are valid lvalues if the operand is an lvalue. The primary restriction is that you cannot take the address of an lvalue cast.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;---------------------------------------------------&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;今天看C++模板的资料，里面说到lvalue,rvalue的问题，这个问题以前也看到过，也查过相关资料，但是没有考虑得很深，只知道rvalue不能取地址，不能赋值等等一些规则。今天则突然有了更深层次的理解（也可以说是顿悟，耗时不过几秒钟），记录下来。&lt;/p&gt;&#xD;
&lt;p&gt;下面是我对这两个单词字面的意思的猜测：&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;lvalue估计来源于left value。 在赋值语句中lvalue = rvalue；位置处于左边。就是可以修改的值。&lt;/li&gt;&lt;li&gt;rvalue估计来源于right value。处于赋值语句右边，是只读的不可修改的值。 &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;接下来是我所悟到内容的详细分析&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;lvalue是可以赋值的，说明它是一个变量，它在内存中一定存在，一定有地址。所以&amp;amp;lvalue是有效的，能取到在内存中的地址。 &#xD;
&lt;p&gt;访问lvalue一定会导致CPU访问存储器（相对较慢的操作）。&lt;/p&gt;&#xD;
&lt;p&gt;lvalue的例子：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;/div&gt;&#xD;
&lt;ol &gt;&lt;li &gt;&lt;span &gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;a;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;a&amp;nbsp;=&amp;nbsp;10;&amp;nbsp;&lt;/span&gt;&lt;span &gt;//&amp;nbsp;a是lvalue。 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;int&lt;/span&gt;&lt;span&gt;*&amp;nbsp;p&amp;nbsp;=&amp;nbsp;&amp;amp;a;&amp;nbsp;&lt;/span&gt;&lt;span &gt;//&amp;nbsp;&amp;amp;a是rvalue。 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;amp;a&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&lt;/span&gt;&lt;span &gt;//错误，&amp;amp;a不是lvalue，因为a的地址一旦分配好了，就不能改变了。&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;textarea style="display: none"  rows="15" cols="50" name="code"&gt;int a;&#xD;
a = 10; // a是lvalue。&#xD;
int* p = &amp;amp;a; // &amp;amp;a是rvalue。&#xD;
&amp;amp;a = 0; //错误，&amp;amp;a不是lvalue，因为a的地址一旦分配好了，就不能改变了。&#xD;
&lt;/textarea&gt;&lt;/li&gt;&lt;li&gt;&#xD;
&lt;p&gt;rvalue是不可以赋值的，它不是一个变量，在内存中没有存在，没有地址。它要么是存在于CPU的寄存器中，要么是存在于指令中（立即数）。所以只要对rvalue取地址，那么就一定是错误的（编译器会抱怨的）。&lt;/p&gt;&#xD;
&lt;p&gt;访问rvalue不会导致CPU访问存储器（对立即数和寄存器的访问很快）。&lt;/p&gt;&#xD;
&lt;p&gt;rvalue的例子：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;/div&gt;&#xD;
&lt;ol &gt;&lt;li &gt;&lt;span &gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;a;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;a&amp;nbsp;=&amp;nbsp;10;&amp;nbsp;&lt;/span&gt;&lt;span &gt;//&amp;nbsp;10是rvalue，它没有地址，&amp;amp;10就是错误的表达式。从汇编语言的角度来看，10是直接存在于MOV指令中的立即数。 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;10&amp;nbsp;=&amp;nbsp;a;&amp;nbsp;&lt;/span&gt;&lt;span &gt;//&amp;nbsp;错误，10是rvalue，不可赋值。 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;//函数返回值属于rvalue，因为返回值通常用CPU寄存器传递，没有地址。 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;foo()&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;b&amp;nbsp;=&amp;nbsp;foo();&amp;nbsp;&lt;/span&gt;&lt;span &gt;//没问题，函数返回值是rvalue。 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;int&lt;/span&gt;&lt;span&gt;*&amp;nbsp;p&amp;nbsp;=&amp;nbsp;&amp;amp;foo();&amp;nbsp;&lt;/span&gt;&lt;span &gt;//错误，rvalue没有地址。 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;bar(&lt;/span&gt;&lt;span &gt;int&lt;/span&gt;&lt;span&gt;&amp;amp;&amp;nbsp;i)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;bar(foo());&amp;nbsp;&lt;/span&gt;&lt;span &gt;//错误，bar函数参数需要的是lvalue。&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;textarea style="display: none"  rows="15" cols="50" name="code"&gt;int a;&#xD;
a = 10; // 10是rvalue，它没有地址，&amp;amp;10就是错误的表达式。从汇编语言的角度来看，10是直接存在于MOV指令中的立即数。&#xD;
10 = a; // 错误，10是rvalue，不可赋值。&#xD;
//函数返回值属于rvalue，因为返回值通常用CPU寄存器传递，没有地址。&#xD;
int foo()&#xD;
{&#xD;
    return 0;&#xD;
}&#xD;
int b = foo(); //没问题，函数返回值是rvalue。&#xD;
int* p = &amp;amp;foo(); //错误，rvalue没有地址。&#xD;
void bar(int&amp;amp; i)&#xD;
{&#xD;
}&#xD;
bar(foo()); //错误，bar函数参数需要的是lvalue。&lt;/textarea&gt;&lt;/li&gt;&lt;li&gt;函数的返回值是rvalue，对于返回int, char 等这样最基本的类型，是通过CPU寄存器返回的，因此返回值没有地址是可以理解的。但是如果函数返回的是一个用户自定义类型的对象，肯定不可能通过寄存器来返回这个对象值的（寄存器大小数量都有限，对象的大小可以非常大），那究竟是怎样返回对象的呢？ &#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;/div&gt;&#xD;
&lt;ol &gt;&lt;li &gt;&lt;span &gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;UDT&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;data[100];&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;public&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;UDT()&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;/span&gt;&lt;span &gt;"construct/n"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;BBB&amp;amp;&amp;nbsp;operator&amp;nbsp;=&amp;nbsp;(BBB&amp;amp;&amp;nbsp;)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;/span&gt;&lt;span &gt;"operator&amp;nbsp;=/n"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;*&lt;/span&gt;&lt;span &gt;this&lt;/span&gt;&lt;span&gt;;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;};&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;UDT&amp;nbsp;foo()&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;UDT();&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;main()&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;UDT&amp;nbsp;obj&amp;nbsp;=&amp;nbsp;foo();&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;//输出： &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;construct&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;textarea style="display: none"  rows="15" cols="50" name="code"&gt;class UDT&#xD;
{&#xD;
  int data[100];&#xD;
public:&#xD;
  UDT()&#xD;
  {&#xD;
    printf("construct/n");&#xD;
  }&#xD;
  BBB&amp;amp; operator = (BBB&amp;amp; )&#xD;
  {&#xD;
    printf("operator =/n");&#xD;
    return *this;&#xD;
  }&#xD;
};&#xD;
UDT foo()&#xD;
{&#xD;
  return UDT();&#xD;
}&#xD;
void main()&#xD;
{&#xD;
  UDT obj = foo();&#xD;
}&#xD;
//输出：&#xD;
construct&#xD;
&lt;/textarea&gt; &#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;带着疑问，我查了查vc编译出来的代码，原来obj这个局部变量的地址被压入了堆栈，foo函数内部以堆栈上的obj地址作为this指针调用了UDT的构造函数。噢，难怪执行UDT obj = foo();这个语句只有调用了一次构造函数，而没有调用operator =，这都是因为函数返回值必须是rvalue这个规则所带来的好处，如果返回值是一个lvalue，那么这个语句一定会调用operator = 运算符。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;a href="http://blog.csdn.net/rogerhe/article/details/6410993"&gt;http://blog.csdn.net/rogerhe/article/details/6410993&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/areliang/aggbug/2251480.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/areliang/archive/2011/11/16/2251480.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/areliang/archive/2011/11/09/2242227.html</id><title type="text">讲讲volatile的作用</title><summary type="text">讲讲volatile的作用 254	推荐 一个定义为volatile的变量是说这变量可能会被意想不到地改变，这样，编译器就不会去假设这个变量的值了。精确地说就是，优化器在用到这个变量时必须每次都小心地重新读取这个变量的值，而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子： 1).并行设备的硬件寄存器（如：状态寄存器） 2).一个中断服务子程序中会访问到的非自动变量(Non-automaticvariables) 3).多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中.</summary><published>2011-11-09T03:11:00Z</published><updated>2011-11-09T03:11:00Z</updated><author><name>On the way</name><uri>http://www.cnblogs.com/areliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/areliang/archive/2011/11/09/2242227.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/areliang/archive/2011/11/09/2242227.html"/><content type="html">&lt;div&gt;&lt;div&gt;讲讲volatile的作用&lt;/div&gt; &lt;span id="ob_logd35599"&gt;&lt;div style="float: right; display: inline; margin: 0pt 10px 5px 0pt; width: 45px; height: 55px; background: url(&amp;quot;/Images/digg.gif&amp;quot;) no-repeat scroll left top transparent;"&gt;	&lt;div style="width: 45px; padding: 10px 0pt 11px; font-size: 18px; font-weight: 600; color: #333333; font-family: tahoma,Arial,Helvetica,sans-serif; line-height: 1;"&gt;254&lt;/div&gt;	&lt;div style="padding: 3px 0pt 0pt 6px; line-height: 1; letter-spacing: 6px;"&gt;&lt;a style="font-size: 12px; line-height: 1;"&gt;推荐&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt; &lt;div&gt;一个定义为volatile的变量是说这变量可能会被意想不到地改变，这样，编译器就不会去假设这个变量的值了。精确地说就是，优化器在用到这个变量时必须每次都小心地重新读取这个变量的值，而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子： &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1).&amp;nbsp;并行设备的硬件寄存器（如：状态寄存器） &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2).&amp;nbsp;一个中断服务子程序中会访问到的非自动变量(Non-automatic&amp;nbsp;variables) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3).&amp;nbsp;多线程应用中被几个任务共享的变量 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道，所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;假设被面试者正确地回答了这是问题（嗯，怀疑这否会是这样），我将稍微深究一下，看一下这家伙是不是直正懂得volatile完全的重要性。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1).&amp;nbsp;一个参数既可以是const还可以是volatile吗？解释为什么。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2).&amp;nbsp;一个指针可以是volatile&amp;nbsp;吗？解释为什么。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3).&amp;nbsp;下面的函数有什么错误： &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;square(volatile&amp;nbsp;int&amp;nbsp;*ptr) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;*ptr&amp;nbsp;*&amp;nbsp;*ptr; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;下面是答案： &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1).&amp;nbsp;是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2).&amp;nbsp;是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3).&amp;nbsp;这段代码的有个恶作剧。这段代码的目的是用来返指针*ptr指向值的平方，但是，由于*ptr指向一个volatile型参数，编译器将产生类似下面的代码： &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;square(volatile&amp;nbsp;int&amp;nbsp;*ptr)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;a,b; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a&amp;nbsp;=&amp;nbsp;*ptr; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b&amp;nbsp;=&amp;nbsp;*ptr; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;a&amp;nbsp;*&amp;nbsp;b; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;由于*ptr的值可能被意想不到地该变，因此a和b可能是不同的。结果，这段代码可能返不是你所期望的平方值！正确的代码如下： &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long&amp;nbsp;square(volatile&amp;nbsp;int&amp;nbsp;*ptr)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;a; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a&amp;nbsp;=&amp;nbsp;*ptr; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;a&amp;nbsp;*&amp;nbsp;a; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt; 讲讲我的理解：&amp;nbsp;（欢迎打板子...~~！） &lt;br /&gt;&lt;br /&gt;关键在于两个地方：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;1.&amp;nbsp;编译器的优化&amp;nbsp;&amp;nbsp;(请高手帮我看看下面的理解) &lt;br /&gt;&lt;br /&gt;在本次线程内,&amp;nbsp;当读取一个变量时，为提高存取速度，编译器优化时有时会先把变量读取到一个寄存器中；以后，再取变量值时，就直接从寄存器中取值； &lt;br /&gt;&lt;br /&gt;当变量值在本线程里改变时，会同时把变量的新值copy到该寄存器中，以便保持一致 &lt;br /&gt;&lt;br /&gt;当变量在因别的线程等而改变了值，该寄存器的值不会相应改变，从而造成应用程序读取的值和实际的变量值不一致 &lt;br /&gt;&lt;br /&gt;当该寄存器在因别的线程等而改变了值，原变量的值不会改变，从而造成应用程序读取的值和实际的变量值不一致&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;举一个不太准确的例子：&amp;nbsp; &lt;br /&gt;&lt;br /&gt;发薪资时，会计每次都把员工叫来登记他们的银行卡号；一次会计为了省事，没有即时登记，用了以前登记的银行卡号；刚好一个员工的银行卡丢了，已挂失该银行卡号；从而造成该员工领不到工资&amp;nbsp; &lt;br /&gt;&lt;br /&gt;员工&amp;nbsp;－－&amp;nbsp;原始变量地址&amp;nbsp; &lt;br /&gt;银行卡号&amp;nbsp;－－&amp;nbsp;原始变量在寄存器的备份&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;在什么情况下会出现(如1楼所说) &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1).&amp;nbsp;并行设备的硬件寄存器（如：状态寄存器）&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2).&amp;nbsp;一个中断服务子程序中会访问到的非自动变量(Non-automatic&amp;nbsp;variables)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3).&amp;nbsp;多线程应用中被几个任务共享的变量&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;补充：&amp;nbsp;volatile应该解释为&amp;#8220;直接存取原始内存地址&amp;#8221;比较合适，&amp;#8220;易变的&amp;#8221;这种解释简直有点误导人；&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;#8220;易变&amp;#8221;是因为外在因素引起的，象多线程，中断等，并不是因为用volatile修饰了的变量就是&amp;#8220;易变&amp;#8221;了，假如没有外因，即使用volatile定义，它也不会变化； &lt;br /&gt;&lt;br /&gt;而用volatile定义之后，其实这个变量就不会因外因而变化了，可以放心使用了；&amp;nbsp;大家看看前面那种解释（易变的）是不是在误导人 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;－－－－－－－－－－－－简明示例如下：－－－－－－－－－－－－－－－－－－ &lt;br /&gt;&lt;br /&gt;volatile关键字是一种类型修饰符，用它声明的类型变量表示可以被某些编译器未知的因素更改，比如：操作系统、硬件或者其它线程等。遇到这个关键字声明的变量，编译器对访问该变量的代码就不再进行优化，从而可以提供对特殊地址的稳定访问。 &lt;br /&gt;使用该关键字的例子如下： &lt;br /&gt;int&amp;nbsp;volatile&amp;nbsp;nVint; &lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;当要求使用volatile&amp;nbsp;声明的变量的值的时候，系统总是重新从它所在的内存读取数据，即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。 &lt;br /&gt;例如： &lt;br /&gt;volatile&amp;nbsp;int&amp;nbsp;i=10; &lt;br /&gt;int&amp;nbsp;a&amp;nbsp;=&amp;nbsp;i; &lt;br /&gt;... &lt;br /&gt;//其他代码，并未明确告诉编译器，对i进行过操作 &lt;br /&gt;int&amp;nbsp;b&amp;nbsp;=&amp;nbsp;i; &lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;volatile&amp;nbsp;指 出&amp;nbsp;i是随时可能发生变化的，每次使用它的时候必须从i的地址中读取，因而编译器生成的汇编代码会重新从i的地址读取数据放在b中。而优化做法是，由于编 译器发现两次从i读数据的代码之间的代码没有对i进行过操作，它会自动把上次读的数据放在b中。而不是重新从i里面读。这样以来，如果i是一个寄存器变量 或者表示一个端口数据就容易出错，所以说volatile可以保证对特殊地址的稳定访问。 &lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;注意，在vc6中，一般调试模式没有进行代码优化，所以这个关键字的作用看不出来。下面通过插入汇编代码，测试有无volatile关键字，对程序最终代码的影响： &lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;首先，用classwizard建一个win32&amp;nbsp;console工程，插入一个voltest.cpp文件，输入下面的代码： &lt;br /&gt;&amp;gt;&amp;gt; &lt;br /&gt;＃i nclude&amp;nbsp;&amp;lt;stdio.h&amp;gt; &lt;br /&gt;void&amp;nbsp;main() &lt;br /&gt;{ &lt;br /&gt;int&amp;nbsp;i=10; &lt;br /&gt;int&amp;nbsp;a&amp;nbsp;=&amp;nbsp;i; &lt;br /&gt;printf("i=&amp;nbsp;%d",a); &lt;br /&gt;//下面汇编语句的作用就是改变内存中i的值，但是又不让编译器知道 &lt;br /&gt;__asm&amp;nbsp;{ &lt;br /&gt;mov&amp;nbsp;dword&amp;nbsp;ptr&amp;nbsp;[ebp-4],&amp;nbsp;20h &lt;br /&gt;} &lt;br /&gt;int&amp;nbsp;b&amp;nbsp;=&amp;nbsp;i; &lt;br /&gt;printf("i=&amp;nbsp;%d",b); &lt;br /&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;然后，在调试版本模式运行程序，输出结果如下： &lt;br /&gt;i&amp;nbsp;=&amp;nbsp;10 &lt;br /&gt;i&amp;nbsp;=&amp;nbsp;32 &lt;br /&gt;然后，在release版本模式运行程序，输出结果如下： &lt;br /&gt;i&amp;nbsp;=&amp;nbsp;10 &lt;br /&gt;i&amp;nbsp;=&amp;nbsp;10 &lt;br /&gt;输出的结果明显表明，release模式下，编译器对代码进行了优化，第二次没有输出正确的i值。下面，我们把&amp;nbsp;i的声明加上volatile关键字，看看有什么变化： &lt;br /&gt;＃i nclude&amp;nbsp;&amp;lt;stdio.h&amp;gt; &lt;br /&gt;void&amp;nbsp;main() &lt;br /&gt;{ &lt;br /&gt;volatile&amp;nbsp;int&amp;nbsp;i=10; &lt;br /&gt;int&amp;nbsp;a&amp;nbsp;=&amp;nbsp;i; &lt;br /&gt;printf("i=&amp;nbsp;%d",a); &lt;br /&gt;__asm&amp;nbsp;{ &lt;br /&gt;mov&amp;nbsp;dword&amp;nbsp;ptr&amp;nbsp;[ebp-4],&amp;nbsp;20h &lt;br /&gt;} &lt;br /&gt;int&amp;nbsp;b&amp;nbsp;=&amp;nbsp;i; &lt;br /&gt;printf("i=&amp;nbsp;%d",b); &lt;br /&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;分别在调试版本和release版本运行程序，输出都是： &lt;br /&gt;i&amp;nbsp;=&amp;nbsp;10 &lt;br /&gt;i&amp;nbsp;=&amp;nbsp;32 &lt;br /&gt;这说明这个关键字发挥了它的作用！ &lt;br /&gt;&lt;br /&gt;－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;volatile对应的变量可能在你的程序本身不知道的情况下发生改变 &lt;br /&gt;比如多线程的程序，共同访问的内存当中，多个程序都可以操纵这个变量 &lt;br /&gt;你自己的程序，是无法判定合适这个变量会发生变化 &lt;br /&gt;还比如，他和一个外部设备的某个状态对应，当外部设备发生操作的时候，通过驱动程序和中断事件，系统改变了这个变量的数值，而你的程序并不知道。 &lt;br /&gt;对于volatile类型的变量，系统每次用到他的时候都是直接从对应的内存当中提取，而不会利用cache当中的原有数值，以适应它的未知何时会发生的变化，系统对这种变量的处理不会做优化&amp;#8212;&amp;#8212;显然也是因为它的数值随时都可能变化的情况。 &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;典型的例子 &lt;br /&gt;for&amp;nbsp;(&amp;nbsp;int&amp;nbsp;i=0;&amp;nbsp;i&amp;lt;100000;&amp;nbsp;i++); &lt;br /&gt;这个语句用来测试空循环的速度的 &lt;br /&gt;但是编译器肯定要把它优化掉，根本就不执行 &lt;br /&gt;如果你写成&amp;nbsp; &lt;br /&gt;for&amp;nbsp;(&amp;nbsp;volatile&amp;nbsp;int&amp;nbsp;i=0;&amp;nbsp;i&amp;lt;100000;&amp;nbsp;i++); &lt;br /&gt;它就会执行了 &lt;br /&gt;&lt;br /&gt;volatile的本意是&amp;#8220;易变的&amp;#8221;&amp;nbsp; &lt;br /&gt;由于访问寄存器的速度要快过RAM，所以编译器一般都会作减少存取外部RAM的优化。比如： &lt;br /&gt;&lt;br /&gt;static&amp;nbsp;int&amp;nbsp;i=0; &lt;br /&gt;&lt;br /&gt;int&amp;nbsp;main(void) &lt;br /&gt;{ &lt;br /&gt;... &lt;br /&gt;while&amp;nbsp;(1) &lt;br /&gt;{ &lt;br /&gt;if&amp;nbsp;(i)&amp;nbsp;dosomething(); &lt;br /&gt;} &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;/*&amp;nbsp;Interrupt&amp;nbsp;service&amp;nbsp;routine.&amp;nbsp;*/ &lt;br /&gt;void&amp;nbsp;ISR_2(void) &lt;br /&gt;{ &lt;br /&gt;i=1; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;程序的本意是希望ISR_2中断产生时，在main当中调用dosomething函数，但是，由于编译器判断在main函数里面没有修改过i，因此 &lt;br /&gt;可能只执行一次对从i到某寄存器的读操作，然后每次if判断都只使用这个寄存器里面的&amp;#8220;i副本&amp;#8221;，导致dosomething永远也不会被 &lt;br /&gt;调用。如果将将变量加上volatile修饰，则编译器保证对此变量的读写操作都不会被优化（肯定执行）。此例中i也应该如此说明。 &lt;br /&gt;&lt;br /&gt;一般说来，volatile用在如下的几个地方： &lt;br /&gt;&lt;br /&gt;1、中断服务程序中修改的供其它程序检测的变量需要加volatile； &lt;br /&gt;&lt;br /&gt;2、多任务环境下各任务间共享的标志应该加volatile； &lt;br /&gt;&lt;br /&gt;3、存储器映射的硬件寄存器通常也要加volatile说明，因为每次对它的读写都可能由不同意义； &lt;br /&gt;&lt;br /&gt;另外，以上这几种情况经常还要同时考虑数据的完整性（相互关联的几个标志读了一半被打断了重写），在1中可以通过关中断来实 &lt;br /&gt;现，2中可以禁止任务调度，3中则只能依靠硬件的良好设计了。&lt;/div&gt;&lt;div&gt;http://blog.21ic.com/user1/2949/archives/2007/35599.html&lt;/div&gt;&lt;img src="http://www.cnblogs.com/areliang/aggbug/2242227.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/areliang/archive/2011/11/09/2242227.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/areliang/archive/2011/11/08/2241127.html</id><title type="text">利用C++/CLI 封装Native C++ 提升.NET web game性能</title><summary type="text">利用C++/CLI 封装Native C++ 提升.NET web game性能 原帖：http://www.cnblogs.com/warensoft/archive/2010/03/07/1680290.html 这段时间在做新项目的技术论证，其基本想法就是利用Flex调用远程WCF以及发送Socket请求，来实现远程通信，WCF负责实时性要求不高的操作，如聊天，邮件，交易，买卖等，而Socket的目的是提供实时战斗的服务。 无论是WCF，还是Socket，都会提供不少的游戏逻辑，当然，大家心里都有数，与C++相比C#在纯数值运算上慢的太多，但是提到语法简洁性，MS的数据访问组件支持...</summary><published>2011-11-08T06:44:00Z</published><updated>2011-11-08T06:44:00Z</updated><author><name>On the way</name><uri>http://www.cnblogs.com/areliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/areliang/archive/2011/11/08/2241127.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/areliang/archive/2011/11/08/2241127.html"/><content type="html">&lt;div&gt;&lt;div id="cnblogs_post_body"&gt;&lt;p&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 宋体; font-size: 24pt;"&gt;&lt;strong&gt;利用&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;&lt;span style="font-size: 24pt;"&gt;&lt;strong&gt;C++/CLI&lt;/strong&gt;&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size: 24pt;"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;封装&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Native C++ &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;提升&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;.NET web game&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;性能&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;原帖：&lt;/p&gt;&lt;div&gt;http://www.cnblogs.com/warensoft/archive/2010/03/07/1680290.html&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;这段时间在做新项目的技术论证，其基本想法就是利用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Flex&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;调用远程&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;WCF&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;以及发送&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Socket&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;请求，来实现远程通信，&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;WCF&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;负责实时性要求不高的操作，如聊天，邮件，交易，买卖等，而&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Socket&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的目的是提供实时战斗的服务。&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;无论是&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;WCF&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，还是&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Socket&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，都会提供不少的游戏逻辑，当然，大家心里都有数，与&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;相比&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;在纯数值运算上慢的太多，但是提到语法简洁性，&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;MS&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的数据访问组件支持，&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;IDE&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的智能感知&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;VC&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;又相形见绌。&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;虽然&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++/CLI&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;不能够满足上面的各种要求，但是它却可以&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Native C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;和&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Adapter&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，来保证程序的优质性。本文的目的有两点：&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: justify; margin-left: 66pt;"&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: Wingdings;"&gt;&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;如何利用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++/CLI&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;封装&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Native C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，并被&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;调用&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: justify; margin-left: 66pt;"&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: Wingdings;"&gt;&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;被封装过的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Native C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;代码与&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;代码在性能方面的对比&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt; &lt;ol&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;C++/CLI&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;封装&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Native C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，并被&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;调用&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;p style="text-align: justify; margin-left: 18pt;"&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;为了方便团队开发，我们通常要将&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;代码编译成&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;DLL&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，以方便&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;.NET&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;开发人员调用，因此，我们首先来编写一个&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Native C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的类，并编译成&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;DLL&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;。过程如下：&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;ol style="margin-left: 36pt;"&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;VS2008&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;VC++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;项目模板中，选择&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Win32&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;项目中的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt; Win32 Project&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，并命名为&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPPDLL&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，如下图所示：&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/warensoft/032010_0556_CCLINat1.png" alt="" /&gt; &lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;选择将其编译成&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;DLL&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，如下图所示：&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/warensoft/032010_0556_CCLINat2.png" alt="" /&gt; &lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在项目中添加一个名为&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPP&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的类，基类结构如下图所示：&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/warensoft/032010_0556_CCLINat3.png" alt="" /&gt; &lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPP&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的头文件（&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPP.h&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;）代码如下：&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;#pragma&lt;/span&gt; &lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;once&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;#include&lt;/span&gt; &lt;span style="font-family: 新宋体; color: #a31515; font-size: 7pt;"&gt;"math.h"&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;#ifndef&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; GoWin_DLL_CLASS_EXPORTS&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;//该类可导出&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;#define&lt;/span&gt;&lt;span style="color: black;"&gt; GoWin_DLL_CLASS &lt;/span&gt;&lt;span style="color: blue;"&gt;__declspec&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;dllexport&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;)&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;#else&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; color: gray; font-size: 7pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //该类可导入&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; color: gray; font-size: 7pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define GoWin_DLL_CLASS __declspec(dllimport)&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;#endif&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;class&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; GoWin_DLL_CLASS NativeCPP&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;:&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NativeCPP(&lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ~NativeCPP(&lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; Compute1();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; Compute2();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 3pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPP&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;CPP&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;文件（&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPP.cpp&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;）的代码如下所示：&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;#include&lt;/span&gt; &lt;span style="font-family: 新宋体; color: #a31515; font-size: 7pt;"&gt;"StdAfx.h"&lt;/span&gt; &lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;#include&lt;/span&gt; &lt;span style="font-family: 新宋体; color: #a31515; font-size: 7pt;"&gt;"NativeCPP.h"&lt;/span&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;NativeCPP::NativeCPP(&lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;)&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;NativeCPP::~NativeCPP(&lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;)&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;void&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; NativeCPP::Compute1 ()&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 22pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: blue;"&gt;for&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; i=0;i&amp;lt;100000;i++)&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 22pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 22pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;for&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; j=0;j&amp;lt;i;j++)&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 22pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 22pt;"&gt;&lt;/p&gt; &lt;p style="margin-left: 22pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 22pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;void&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; NativeCPP::Compute2 ()&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 22pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: blue;"&gt;for&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; i=0;i&amp;lt;&lt;/span&gt; &lt;span style="font-family: 新宋体;"&gt;&lt;span style="font-size: 10pt;"&gt;30000000&lt;/span&gt;&lt;span style="font-size: 7pt;"&gt;;i++)&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 22pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 22pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pow(1.05,i);&lt;/span&gt;&lt;span style="color: green;"&gt;//pow函数是游戏里常用的数据增长公式&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-left: 22pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;/p&gt; &lt;ol style="margin-left: 54pt;"&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;编译代码。&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在解决方案中添加一个&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++/CLI&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的类库，将命名为&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;CPPWrapper&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;如下图所示：&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/warensoft/032010_0556_CCLINat4.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;为&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;CPPWrapper&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;添加刚才编译好的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;DLL&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;项目的引用，如下图所示，在该项目上点击右键，选择&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;"Reference": &lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/warensoft/032010_0556_CCLINat5.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在弹出的对话框中选择&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Add New Reference&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，如下图所示：&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/warensoft/032010_0556_CCLINat6.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Projects&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;里选择刚才建立的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPPDLL&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;项目。如下图所示&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;: &lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/warensoft/032010_0556_CCLINat7.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;CPPWrapper&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;里添加一个头文件，内容和名称都&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;"NativeCPP.h"&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;一样。&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;CPPWrapper&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;里添加一个名为&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPPWrapper&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的托管类，如下图所示：&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/warensoft/032010_0556_CCLINat8.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;该类的结构与&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPP&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;中的类结构完全一样，但是要在类中定义一个从&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;DLL&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;导入的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Native C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;类的指针，&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;.h&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;文件中的代码如下所示：&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 11pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;#pragma&lt;/span&gt; &lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;once&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-left: 11pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;#include&lt;/span&gt; &lt;span style="font-family: 新宋体; color: #a31515; font-size: 7pt;"&gt;"NativeCPP.h"&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-left: 11pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;#define&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; GoWin_DLL_CLASS_EXPORTS&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 11pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;public&lt;/span&gt; &lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;ref&lt;/span&gt; &lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;class&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; NativeCPPWrapper&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 11pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 33pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;private&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;:&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 33pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;NativeCPP*nativeCPP;&lt;/span&gt;&lt;span style="color: green;"&gt;//native c++类的指针&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-left: 33pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;:&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 33pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;NativeCPPWrapper(&lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 33pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;:&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 33pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; Compute1();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 33pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; Compute2();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 11pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;};&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;/p&gt; &lt;p style="text-align: justify; margin-left: 54pt;"&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;该类的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;CPP&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;文件，完成就是对&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Native C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;类的接口转换，其代码如下所示：&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;#include&lt;/span&gt; &lt;span style="font-family: 新宋体; color: #a31515; font-size: 7pt;"&gt;"StdAfx.h"&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;#include&lt;/span&gt; &lt;span style="font-family: 新宋体; color: #a31515; font-size: 7pt;"&gt;"NativeCPPWrapper.h"&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;NativeCPPWrapper::NativeCPPWrapper(&lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;)&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;this&lt;/span&gt;&lt;span style="color: black;"&gt;-&amp;gt;nativeCPP =&lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; NativeCPP();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;void&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; NativeCPPWrapper::Compute1()&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;-&amp;gt;nativeCPP -&amp;gt;Compute1 ();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 7pt;"&gt;void&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt; NativeCPPWrapper::Compute2()&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;{&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;-&amp;gt;nativeCPP -&amp;gt;Compute2 ();&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 66pt;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: 新宋体; font-size: 7pt;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;ol style="margin-left: 54pt;"&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++/CLI&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的项目属性里，将&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Common Language Runtime Support&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;设置为&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Common Language Runtime Support(/clr),&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;否则的话，将无法使用非托管的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Native C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;。&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/warensoft/032010_0556_CCLINat9.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;现在可以建立一个&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的项目了，只要添加&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;CPPWrapper&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的引用，就可以像调用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;写的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;DLL&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;一样来调用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++/CLI&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;写的类了，如下图所示：&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/warensoft/032010_0556_CCLINat10.png" alt="" /&gt; &lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;如何你用的是&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;64&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;位的操作系统的话，直接调用会出错，这时要配置一个&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;项目的编译选择，将编译的目标平台设置成&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;"X86"&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;。（请千万别把它读成&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;"&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;叉儿八六&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;"&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，你是专业计算机人员，应该说的专业点，它叫&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;"&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;艾克思八六&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;"&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;）。如下图所示：&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/warensoft/032010_0556_CCLINat11.png" alt="" /&gt; &lt;/p&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;ol&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;前面对如何利用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++/CLI&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;封装原生&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;代码，并被&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;所调用作了一些说明，下面通过数据对比来说明这样做的意义。&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;ol&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;实验说明：&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;该实验将进行如下几组测试&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;div style="text-align: center; margin-left: 33pt;"&gt; &lt;table style="border-collapse: collapse;" border="0"&gt; &lt;colgroup&gt;&lt;col style="width: 50px;"&gt;&lt;col&gt;&lt;col&gt;&lt;col&gt;&lt;col style="width: 466px;"&gt;&lt;col&gt;&lt;col&gt;&lt;col&gt;&lt;/colgroup&gt; &lt;tbody valign="top"&gt; &lt;tr&gt; &lt;td style="border: 0.5pt solid;"&gt; &lt;p&gt;&lt;span style="font-family: 宋体; color: black; font-size: 12pt;"&gt;&lt;strong&gt;编号&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: 0.5pt 0.5pt 0.5pt medium; border-style: solid solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: 宋体; color: black; font-size: 12pt;"&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="border-width: medium 0.5pt 0.5pt; border-style: none solid solid; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;1&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;利用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;MFC&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;调用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPP &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;DLL&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，并分别测试&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCpp&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;中&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Compute1()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;以及&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Compute2()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;两个函数所需要的时间&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="border-width: medium 0.5pt 0.5pt; border-style: none solid solid; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;2&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;利用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C# WinForm&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;调用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPPWrapper&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;（&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++/CLI&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;）来间接访问&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPP&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;类中的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Compute1()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;以及&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Compute2()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;两个函数，并检测所需要的时间。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="border-width: medium 0.5pt 0.5pt; border-style: none solid solid; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;3&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;利用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C# WinForm&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;直接调用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;编写的相同功能的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Compute1()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;以及&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Compute2()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;两个函数，并检测所需要的时间。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/div&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;说明：&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Compute1&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;（）里只有循环，&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Compute2&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;（）里包括了一个&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;pow&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数。&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;ol&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;代码略&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;测试环境&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;p style="text-align: center; margin-left: 18pt;"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/warensoft/032010_0556_CCLINat12.png" alt="" /&gt; &lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;测试结果（&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Debug&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;版本）&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;/li&gt;&lt;/ol&gt; &lt;div&gt; &lt;table style="border-collapse: collapse;" border="0"&gt; &lt;colgroup&gt;&lt;col style="width: 50px;"&gt;&lt;col&gt;&lt;col&gt;&lt;col&gt;&lt;col style="width: 421px;"&gt;&lt;col&gt;&lt;col&gt;&lt;col&gt;&lt;col style="width: 45px;"&gt;&lt;col&gt;&lt;col&gt;&lt;col&gt;&lt;/colgroup&gt; &lt;tbody valign="top"&gt; &lt;tr&gt; &lt;td style="border: 0.5pt solid;"&gt; &lt;p&gt;&lt;span style="font-family: 宋体; color: black; font-size: 12pt;"&gt;&lt;strong&gt;编号&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: 0.5pt 0.5pt 0.5pt medium; border-style: solid solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: 宋体; color: black; font-size: 12pt;"&gt;&lt;strong&gt;操作&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: 0.5pt 0.5pt 0.5pt medium; border-style: solid solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: 宋体; color: black; font-size: 12pt;"&gt;&lt;strong&gt;时间&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="border-width: medium 0.5pt 0.5pt; border-style: none solid solid; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;1&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;MFC &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;调用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPP::Compute1&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;（）&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;14s&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="border-width: medium 0.5pt 0.5pt; border-style: none solid solid; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;2&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;MFC&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;调用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPP::Compute2&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;（）&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;9s&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="border-width: medium 0.5pt 0.5pt; border-style: none solid solid; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;3&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;调用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPPWrapper::Compute1()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;14s&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="border-width: medium 0.5pt 0.5pt; border-style: none solid solid; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;4&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;调用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;NativeCPPWrapper::Compute2()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;9s&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="border-width: medium 0.5pt 0.5pt; border-style: none solid solid; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;5&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;调用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;写的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Compute1()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;19s&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="border-width: medium 0.5pt 0.5pt; border-style: none solid solid; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;6&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;调用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;写的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Compute2()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="border-width: medium 0.5pt 0.5pt medium; border-style: none solid solid none; border-color: -moz-use-text-color;"&gt; &lt;p&gt;&lt;span style="font-family: Times New Roman; color: black; font-size: 12pt;"&gt;3s&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/div&gt; &lt;ol&gt;&lt;li&gt; &lt;div&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;结论&lt;/span&gt; &lt;/span&gt;&lt;/div&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;通过&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;1&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;2&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;3&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;4&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的数据，不难发现，利用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++/CLI&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;封装过的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Native C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;在性能上基本没有什么损失（但是一定要在操作密集中的代码中封装，而不是调用密集型的代码）。&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;1&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;3&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;、&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;5&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;三组数据可说明，在单纯的循环上，&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;要比&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;慢很多。&lt;/span&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: black; font-size: 12pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;debug&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;模式下大量使用&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Pow&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数的时候&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;.net framework&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;里提供的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Math.Pow&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，要远远快于&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;math.h&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;中的&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;pow&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数，实验结果中几乎差了三倍！如果改成&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;Release&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;模式，&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;中两函数的操作时间基本上都为&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;0&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，当然&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C#&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的速度也有明显提高，但是要远远慢于&lt;/span&gt;&lt;span style="font-family: Times New Roman;"&gt;C++&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/areliang/aggbug/2241127.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/areliang/archive/2011/11/08/2241127.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/areliang/archive/2008/04/02/1134188.html</id><title type="text">规格单位换算</title><summary type="text">1英寸=1440twip1毫米=56.47twip 那么 1毫米 = 56.47/1440 = 0.0392 英寸</summary><published>2008-04-02T02:56:00Z</published><updated>2008-04-02T02:56:00Z</updated><author><name>On the way</name><uri>http://www.cnblogs.com/areliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/areliang/archive/2008/04/02/1134188.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/areliang/archive/2008/04/02/1134188.html"/></entry></feed>
