﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-读来du往de猫的世界</title><link>http://www.cnblogs.com/alonecat06/</link><description>斌伯</description><language>zh-cn</language><lastBuildDate>Fri, 09 Jan 2009 10:05:01 GMT</lastBuildDate><pubDate>Fri, 09 Jan 2009 10:05:01 GMT</pubDate><ttl>60</ttl><item><title>【转载】学习C++的50忠告</title><link>http://www.cnblogs.com/alonecat06/archive/2008/11/28/1342743.html</link><dc:creator>斌伯</dc:creator><author>斌伯</author><pubDate>Thu, 27 Nov 2008 17:33:00 GMT</pubDate><guid>http://www.cnblogs.com/alonecat06/archive/2008/11/28/1342743.html</guid><wfw:comment>http://www.cnblogs.com/alonecat06/comments/1342743.html</wfw:comment><comments>http://www.cnblogs.com/alonecat06/archive/2008/11/28/1342743.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/alonecat06/comments/commentRss/1342743.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/alonecat06/services/trackbacks/1342743.html</trackback:ping><description><![CDATA[<p>&nbsp;中望的C\C++笔试给bs了，有感而发，摘录下文。虽然文章很旧了，而且其中建议有些自相矛盾，但还是可以参考参考的。</p>
<p>&nbsp;</p>
<p>1.把C++当成一门新的语言学习（和C没啥关系！真的。）； </p>
2.看《Thinking In C++》，不要看《C++变成死相》； <br />
3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看； <br />
4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境，而我们要学的是一门语言； <br />
5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单，或者可以引伸出很多知识点； <br />
6.会用Visual C++，并不说明你会C++； <br />
7.学class并不难，template、STL、generic programming也不过如此——难的是长期坚持实践和不遗余力的博览群书； <br />
8.如果不是天才的话，想学编程就不要想玩游戏——你以为你做到了，其实你的C++水平并没有和你通关的能力一起变高——其实可以时刻记住：学C++是为了编游戏的； <br />
9.看Visual C++的书，是学不了C++语言的； <br />
10.浮躁的人容易说：XX语言不行了，应该学YY；——是你自己不行了吧！？ <br />
11.浮躁的人容易问：我到底该学什么；——别问，学就对了； <br />
12.浮躁的人容易问：XX有钱途吗；——建议你去抢银行； <br />
13.浮躁的人容易说：我要中文版！我英文不行！——不行？学呀！ <br />
14.浮躁的人容易问：XX和YY哪个好；——告诉你吧，都好——只要你学就行； <br />
15.浮躁的人分两种：a)只观望而不学的人；b)只学而不坚持的人； <br />
16.把时髦的技术挂在嘴边，还不如把过时的技术记在心里； <br />
17.C++不仅仅是支持面向对象的程序设计语言； <br />
18.学习编程最好的方法之一就是阅读源代码； <br />
19.在任何时刻都不要认为自己手中的书已经足够了； <br />
20.请阅读《The Standard C++ Bible》(中文版：标准C++宝典)，掌握C++标准； <br />
21.看得懂的书，请仔细看；看不懂的书，请硬着头皮看； <br />
22.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍； <br />
23.请看《Effective C++》和《More Effective C++》以及《Exceptional C++》； <br />
24.不要停留在集成开发环境的摇篮上，要学会控制集成开发环境，还要学会用命令行方式处理程序； <br />
25.和别人一起讨论有意义的C++知识点，而不是争吵XX行不行或者YY与ZZ哪个好； <br />
26.请看《程序设计实践》，并严格的按照其要求去做； <br />
27.不要因为C和C++中有一些语法和关键字看上去相同，就认为它们的意义和作用完全一样； <br />
28.C++绝不是所谓的C的&#8220;扩充&#8221;——如果C++一开始就起名叫Z语言，你一定不会把C和Z语言联系得那么紧密； <br />
29.请不要认为学过XX语言再改学C++会有什么问题——你只不过又在学一门全新的语言而已； <br />
30.读完了《Inside The C++ Object Model》以后再来认定自己是不是已经学会了C++； <br />
31.学习编程的秘诀是：编程，编程，再编程； <br />
32.请留意下列书籍：《C++面向对象高效编程（C++ Effective Object-Oriented Software Construction）》《面向对象软件构造(Object-Oriented Software Construction)》《设计模式（Design Patterns）》《The Art of Computer Programming》； <br />
33.记住：面向对象技术不只是C++专有的； <br />
34.请把书上的程序例子亲手输入到电脑上实践，即使配套光盘中有源代码； <br />
35.把在书中看到的有意义的例子扩充； <br />
36.请重视C++中的异常处理技术，并将其切实的运用到自己的程序中； <br />
37.经常回顾自己以前写过的程序，并尝试重写，把自己学到的新知识运用进去； <br />
38.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路； <br />
39.C++语言和C++的集成开发环境要同时学习和掌握； <br />
40.既然决定了学C++,就请坚持学下去，因为学习程序设计语言的目的是掌握程序设计技术，而程序设计技术是跨语言的； <br />
41.就让C++语言的各种平台和开发环境去激烈的竞争吧，我们要以学习C++语言本身为主； <br />
42.当你写C++程序写到一半却发现自己用的方法很拙劣时，请不要马上停手；请尽快将余下的部分粗略的完成以保证这个设计的完整性，然后分析自己的错误并重新设计和编写（参见43）； <br />
43.别心急，设计C++的class确实不容易；自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的； <br />
44.决不要因为程序&#8220;很小&#8221;就不遵循某些你不熟练的规则——好习惯是培养出来的，而不是一次记住的； <br />
45.每学到一个C++难点的时候，尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了； <br />
46.记录下在和别人交流时发现的自己忽视或不理解的知识点； <br />
47.请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成Version 100.XX； <br />
48.保存好你写过的所有的程序——那是你最好的积累之一； <br />
49.请不要做浮躁的人； <br />
50.请热爱C++!<img src ="http://www.cnblogs.com/alonecat06/aggbug/1342743.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44381/" target="_blank">Google浏览器Chrome 2.0测试版发布</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>【转载】 ADS与ARX的比较 </title><link>http://www.cnblogs.com/alonecat06/archive/2008/11/22/1339001.html</link><dc:creator>斌伯</dc:creator><author>斌伯</author><pubDate>Sat, 22 Nov 2008 07:48:00 GMT</pubDate><guid>http://www.cnblogs.com/alonecat06/archive/2008/11/22/1339001.html</guid><wfw:comment>http://www.cnblogs.com/alonecat06/comments/1339001.html</wfw:comment><comments>http://www.cnblogs.com/alonecat06/archive/2008/11/22/1339001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/alonecat06/comments/commentRss/1339001.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/alonecat06/services/trackbacks/1339001.html</trackback:ping><description><![CDATA[<p>转载一文，来自晓东CAD家园的文章。文章详细叙述了ARX、ADS等AutoCAD二次开发接口的东西</p>
<p>http://www.xdcad.net/article/article/htmlcache/1709.html</p>
<p><br />
</p>
<p> </p>
<p>　　AutoLISP是一种解释性的语言，它提供了一个简单的扩充AutoCAD命令的机制。ADS是用C语言开发的 编译执行的。然而，对于AutoCAD来说，ADS程序和AutoCAD程序没有什么区别。一个ADS程序实际上是由一组外部函数组成，它们由 AutoLISP解释器来加载调用，ADS程序本身并不能直接和AutoCAD进行通讯 </p>
<p> </p>
<p>　　ARX程序在很多方面都和ADS程序、AutoLISP程序不同。最重要的一点是，ARX程序实质上是一个动态链 接库（Dll），它和AutoCAD共享地址空间并且直接和AutoCAD进行通讯。对于经常需要和AutoCAD通讯的应用程序来说，ARX程序比 ARX运行更块。除了速度上的提高之外，ARX程序还可以创建新的类（klass），这些类可以为其它程序共享，从而充分利用面向对象编程的优点。ARX 程序创建的实体几乎和AutuCAD的内在试题是完全等同的。 </p>
<p> </p>
<p>  </p>
<p> </p>
<p>　 ADS与ARX的区别： </p>
<p>   1. ARX程序是一个动态链接库(DLL)，它直接和AutoCAD进行通讯。ADS程序是一个可执行文件，它需要通过AutoLISP来和AutoCAD进行通讯。 </p>
<p>    </p>
<p>2. AutoCAD是不可重入的，因此ADS程序也是不可重入的。而在ARX中，每一个命令都有独立的入口。 </p>
<p>    </p>
<p>3. ARX程序速度快，但更&#8220;脆弱&#8221;，ARX程序和AutoCAD共享进程空间，ARX程序本身是AutoCAD的一部分，ARX程序的崩溃通常会导致 AutoCAD系统的崩溃。而AutoLISP和ADS都是通过函数来间接访问AutoCAD。ADS程序速度慢，但更&#8220;绝缘&#8221;，ADS程序崩溃并不一定 导致AutoCAD系统崩溃。 </p>
<p>    </p>
<p>4. ADS程序类似如宏（macro），ADS中的函数（如ads_command）以及和AutoLISP的通讯使得ADS程序的工作类似于自动作用的宏。相比之下，ARX程序则是更基本，主程序（AutoCAD）调用每一个ARX程序注册的命令。 </p>
<p>    </p>
<p>5. ARX程序具有ADS程序和AutoLISP程序所不具备的访问和控制AutoCAD的能力。 </p>
<p>    </p>
<p>6. ARX提供了面向对象编程的技术。ARX充分支持C++，充分支持面向对象编程的技术，而ADS仍然只能使用传统的C语言编程。 </p><img src ="http://www.cnblogs.com/alonecat06/aggbug/1339001.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44380/" target="_blank">微软中国被指变相裁员 微软称确有过人事调整</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>【转载】比较c++中的值传递，引用传递，指针传递</title><link>http://www.cnblogs.com/alonecat06/archive/2008/10/30/1323100.html</link><dc:creator>斌伯</dc:creator><author>斌伯</author><pubDate>Thu, 30 Oct 2008 08:13:00 GMT</pubDate><guid>http://www.cnblogs.com/alonecat06/archive/2008/10/30/1323100.html</guid><wfw:comment>http://www.cnblogs.com/alonecat06/comments/1323100.html</wfw:comment><comments>http://www.cnblogs.com/alonecat06/archive/2008/10/30/1323100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/alonecat06/comments/commentRss/1323100.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/alonecat06/services/trackbacks/1323100.html</trackback:ping><description><![CDATA[<p><strong></strong></p>
<p>很久没有上了，这段时间挺忙的，不过看到这篇好文章，还是转载一下，文章直截了当说明了值传递、引用传递和指针传递三者之间的不同，它厘清了三者之间模糊的边界，对理解C++是十分有益的。</p>
<p>原文网址：http://windshowzbf.bokee.com/2631833.html</p>
<p>&nbsp;</p>
<p><strong>关键词</strong>：			    c++ &nbsp;&nbsp;			    值传递 &nbsp;&nbsp;			    引用传递 &nbsp;&nbsp;			    指针传递&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 				  				 </p>
<p>在vc6.0下，写了个简单的程序！</p>
<p style="line-height: 12pt;"><span style="font-family: 宋体;" times="" new="" roman=""  ;="" 10. 5pt="">在</span>vc6.0<span style="font-family: 宋体;" times="" new="" roman=""  ;="" 10. 5pt="">中，</span>File-&gt;new-&gt;SourceFile</p>
<p>&nbsp;</p>
<p style="line-height: 12pt;">#include "stdio.h"</p>
<p style="line-height: 12pt;">#include "iostream.h"</p>
<p>&nbsp;</p>
<p style="line-height: 12pt;">void DeliByValue(int x);</p>
<p style="line-height: 12pt;">void DeliByReference(int &amp;x);</p>
<p style="line-height: 12pt;">void DeliByPointer(int *x);</p>
<p>&nbsp;</p>
<p style="line-height: 12pt;">void main()</p>
<p style="line-height: 12pt;">{</p>
<p style="line-height: 12pt;">&nbsp;int number=0;</p>
<p style="line-height: 12pt;">&nbsp;DeliByValue(number);</p>
<p style="line-height: 12pt;">&nbsp;cout&lt;&lt;number&lt;&lt;endl;</p>
<p>&nbsp;</p>
<p style="line-height: 12pt;">&nbsp;number=0;//<span style="font-family: 宋体;" times="" new="" roman=""  ;="" 10. 5pt="">重新归</span>0</p>
<p style="line-height: 12pt;">&nbsp;DeliByReference(number);</p>
<p style="line-height: 12pt;">&nbsp;cout&lt;&lt;number&lt;&lt;endl;</p>
<p>&nbsp;</p>
<p style="line-height: 12pt;">&nbsp;number=0;//<span style="font-family: 宋体;" times="" new="" roman=""  ;="" 10. 5pt="">重新归</span>0</p>
<p style="line-height: 12pt;">&nbsp;DeliByPointer(&amp;number);</p>
<p style="line-height: 12pt;">&nbsp;cout&lt;&lt;number&lt;&lt;endl;</p>
<p style="line-height: 12pt;">}</p>
<p style="line-height: 12pt;">void DeliByValue(int x)</p>
<p style="line-height: 12pt;">{</p>
<p style="line-height: 12pt;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x = x+10;</span></p>
<p style="line-height: 12pt;">}</p>
<p style="line-height: 12pt;">void DeliByReference(int &amp;x)</p>
<p style="line-height: 12pt;">{</p>
<p style="line-height: 12pt;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x=x+10;</span></p>
<p style="line-height: 12pt;">}</p>
<p style="line-height: 12pt;">void DeliByPointer(int *x)</p>
<p style="line-height: 12pt;">{</p>
<p style="line-height: 12pt;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (*x) = (*x)+10;</span></p>
<p style="line-height: 12pt;">}</p>
<p>&nbsp;</p>
<p style="line-height: 12pt;"><span style="font-family: 宋体;" times="" new="" roman=""  ;="" 10. 5pt="">运行结果如下：</span>0</p>
<p style="line-height: 12pt;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 10</span></p>
<p style="line-height: 12pt;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;10</span></p>
<p style="line-height: 12pt;"><span style="font-family: 宋体;" times="" new="" roman=""  ;="" 10. 5pt="">通过这个程序进行的比较可以看出，在书写值传递，引用传递，指针传递这三个函数和调用这三个函数的区别。</span></p>
<p style="line-height: 12pt;"><span style="font-family: 宋体;" times="" new="" roman=""  ;="" 10. 5pt="">林锐在《高质量c＋＋编程指南》中对此有介绍：</span></p>
<p style="line-height: 12pt;"><span style="font-family: 宋体;" times="" new="" roman=""  ;="" 10. 5pt="">附上：</span></p>
<span style="font-family: 宋体;" times="" new="" roman=""  ;="" 10. 5pt="">
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">引用是C++中的概念，初学者容易把引用和指针混淆一起。一下程序中，n是m的一个引用（reference），m是被引用物（referent）。</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; int m;</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; int &amp;n = m;</span></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">n</span><span style="font-family: 宋体;">相当于m的别名（绰号），对n的任何操作就是对m的操作。例如有人名叫王小毛，他的绰号是&#8220;三毛&#8221;。说&#8220;三毛&#8221;怎么怎么的，其实就是对王小毛说三道四。所以n既不是m的拷贝，也不是指向m的指针，其实n就是m它自己。</span></p>
<p style="text-indent: 21.25pt;"><strong><span style="color: red; font-family: 宋体;">引用的一些规则如下：</span></strong></p>
<p><strong><span style="color: red; font-family: 宋体;">（1）引用被创建的同时必须被初始化（指针则可以在任何时候被初始化）。</span></strong></p>
<p><strong><span style="color: red; font-family: 宋体;">（2）不能有NULL引用，引用必须与合法的存储单元关联（指针则可以是NULL）。</span></strong></p>
<p><strong><span style="color: red; font-family: 宋体;">（3）一旦引用被初始化，就不能改变引用的关系（指针则可以随时改变所指的对象）。</span></strong></p>
<p><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">以下示例程序中，k被初始化为i的引用。语句k = j并不能将k修改成为j的引用，只是把k的值改变成为6。由于k是i的引用，所以i的值也变成了6。</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; int i = 5;</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; int j = 6;</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; int &amp;k = i;</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; k = j;&nbsp;// k</span><span style="font-family: 宋体;">和i的值都变成了6;</span></p>
<p><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">上面的程序看起来象在玩文字游戏，没有体现出引用的价值。引用的主要功能是传递函数的参数和返回值。C++语言中，函数的参数和返回值的传递方式有三种：<strong><span style="color: red;">值传递、指针传递和引用传递。</span></strong></span></p>
<p><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">以下是&#8220;值传递&#8221;的示例程序。由于Func1函数体内的x是外部变量n的一份拷贝，改变x的值不会影响n, 所以n的值仍然是0。</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; void Func1(int x)</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">{</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; x = x + 10;</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">}</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">&#8230;</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">int n = 0;</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; Func1(n);</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; cout &lt;&lt; &#8220;n = &#8221; &lt;&lt; n &lt;&lt; endl;&nbsp;// n = 0</span></p>
<p><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-indent: 21.25pt;"><span style="font-family: 宋体;">以下是&#8220;指针传递&#8221;的示例程序。由于Func2函数体内的x是指向外部变量n的指针，改变该指针的内容将导致n的值改变，所以n的值成为10。</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; void Func2(int *x)</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">{</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; (* x) = (* x) + 10;</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">}</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">&#8230;</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">int n = 0;</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; Func2(&amp;n);</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; cout &lt;&lt; &#8220;n = &#8221; &lt;&lt; n &lt;&lt; endl;&nbsp;&nbsp;&nbsp;&nbsp; // n = 10</span></p>
<p><span style="font-family: 宋体;">
<p>&nbsp;</p>
</span></p>
<p><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">以下是&#8220;引用传递&#8221;的示例程序。由于Func3函数体内的x是外部变量n的引用，x和n是同一个东西，改变x等于改变n，所以n的值成为10。</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; void Func3(int &amp;x)</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">{</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; x = x + 10;</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">}</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">&#8230;</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21.25pt;"><span style="font-family: 宋体;">int n = 0;</span></p>
<p style="margin: 0cm 0cm 0pt 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; Func3(n);</span></p>
<p style="margin: 0cm 0cm 0pt 1.4pt; text-indent: 21pt;"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; cout &lt;&lt; &#8220;n = &#8221; &lt;&lt; n &lt;&lt; endl;&nbsp;&nbsp;&nbsp;&nbsp; // n = 10</span></p>
<p style="margin: 0cm 0cm 0pt 1.4pt; text-indent: 21pt;"><strong><span style="color: red; font-family: 宋体;">//</span></strong><strong><span style="color: red; font-family: 宋体;">好好理解&#8220;值传递&#8221;&#8220;指针传递&#8221;&#8220;引用传递&#8221;（zbf）</span></strong></p>
<p><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">对比上述三个示例程序，会发现&#8220;引用传递&#8221;的性质象&#8220;指针传递&#8221;，而书写方式象&#8220;值传递&#8221;。实际上&#8220;引用&#8221;可以做的任何事情&#8220;指针&#8221;也都能够做，为什么还要&#8220;引用&#8221;这东西？</span></p>
<p style="text-indent: 21.25pt;"><span style="font-family: 宋体;">答案是&#8220;<strong><span style="color: red;">用适当的工具做恰如其分的工作&#8221;。</span></strong></span></p>
<p><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">指针能够毫无约束地操作内存中的如何东西，尽管指针功能强大，但是非常危险。就象一把刀，它可以用来砍树、裁纸、修指甲、理发等等，谁敢这样用？</span></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">如果的确只需要借用一下某个对象的&#8220;别名&#8221;，那么就用&#8220;引用&#8221;，而不要用&#8220;指针&#8221;，以免发生意外。比如说，某人需要一份证明，本来在文件上盖上公章的印子就行了，如果把取公章的钥匙交给他，那么他就获得了不该有的权利。</span></p>
</span><img src ="http://www.cnblogs.com/alonecat06/aggbug/1323100.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44379/" target="_blank">“新一代互联网”研究：中国走在世界前列</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>【项目】优化算法设计（三）：程序的改进的设想</title><link>http://www.cnblogs.com/alonecat06/archive/2008/09/12/1096000.html</link><dc:creator>斌伯</dc:creator><author>斌伯</author><pubDate>Fri, 12 Sep 2008 11:19:00 GMT</pubDate><guid>http://www.cnblogs.com/alonecat06/archive/2008/09/12/1096000.html</guid><wfw:comment>http://www.cnblogs.com/alonecat06/comments/1096000.html</wfw:comment><comments>http://www.cnblogs.com/alonecat06/archive/2008/09/12/1096000.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/alonecat06/comments/commentRss/1096000.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/alonecat06/services/trackbacks/1096000.html</trackback:ping><description><![CDATA[项目程序需要改进的地方：<br />
<br />
1.程序模块化：<br />
&nbsp;&nbsp;&nbsp;&nbsp; 想法是把程序分为3个模块，就是3个dll咯，分别是用户界面，数据处理和优化计算。通过使程序模块化不仅可以实现用户升级，还可以给出接口让后人继续做的时候能够接上继续开发。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 程序分模块还要想到使用设计模式，这样才能使程序能够应对变化，保持稳定。变化点主要是在数据处理和优化计算之间。我考虑了一下，在装配好数据后，使用Creational Patterns创建优化计算的对象（GAOperator），具体是Factory Method 还是Builder，还没具体定下。而优化对象的结构也要进行设计来应对自身的变化，这会使用到Structural Patterns。如果还是像现在那样，选择交叉变异三算子合一的话，可以使用Bridge，它可以实现接口和具体实现的各种衍化。而李文雄老师也提出了给用户选择。他说，现在那个界面只有一个下拉菜单，可以做多几个，例如 交叉算子做一个、变异算子做一个、选择算子做一个，可以让用户组合。如果真的是这样的话，就要用到Facade，使得变化的组成对客户程序是隐藏的。<br />
<br />
2.优化算法的改进：<br />
&nbsp;&nbsp;&nbsp;&nbsp; 改进遗传算法的问题上，李文雄老师提出要发挥遗传算法的全局搜索能力，关键就是要保持种群的多样性。要设计好一些机制，使得多样性得以维持。这就要在遗传算法的选择交叉变异三算子上下功夫。他提议可以每当新老种群交替，不要一下子就全都改变，可以在新种群中选择几个适应度低的替换旧种群，或换成随机产生的新个体。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 另为李老师还提出遗传算法运算后的结果展示有可能也改进一下。现在是用表格来显示，他希望用坐标图形来显示，做到能在优化过程中显示适应度的变化过程，就是横坐标是遗传代数，纵坐标是适应度值。这个实现起来可能很容易。我之前在vs2005使用过一个一个商业控件，给他一个DataSet设一下参数就可以出各种各样的图，包括直方图，曲线图，圈图... 我已经把各代的运算结果做成DataSet了，但现在转到vs2008来开发，不知道那个控件还能不能用。也可以是尝试自己写这样的图形控件，不过很有难度，而且时间不多了。<br />
<br />
3.商业化的Project插件：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就是要做好安装包，还有帮助文件的编制。安装包除了我们的程序，还要包括Office PIA和.Net Framework 3.5的打包的。帮助文件要说明一下软件原理和具体的操作。<br />
<br />
4.使用算例显示算法优势：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就想李东南老师的论文那样的。但他的所谓&#8220;Project有资源均衡&#8221;的优化也是有些勉强。他的做法就是把资源设置为工时类型，并设为累积计算。然后资源强度是使用一个人为100%资源使用率。当一项任务一天需要17人时，就是1700%了。而那些双代号图，资源用量图是他从Project得到结果后再用另一个软件（梦龙网络计划编制系统）一步步画出来的。早知道Project对建筑工程计划编制的支持不是很好，我就不做成Project的插件，而直接做整个软件了。我也有甘特图等那些图形控件，做起来不一定比研究Project文件结构插件做法要慢。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 我已经把他的第一个算例按我的方法做了，等到有空在把另为两个也做，到时就可以用了。<img src ="http://www.cnblogs.com/alonecat06/aggbug/1096000.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44378/" target="_blank">苏宁首战告捷 销售同比增六成</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>【项目】07年度科创项目“智能施工网络优化软件开发”结题书、源代码发布</title><link>http://www.cnblogs.com/alonecat06/archive/2008/09/12/1290157.html</link><dc:creator>斌伯</dc:creator><author>斌伯</author><pubDate>Fri, 12 Sep 2008 11:15:00 GMT</pubDate><guid>http://www.cnblogs.com/alonecat06/archive/2008/09/12/1290157.html</guid><wfw:comment>http://www.cnblogs.com/alonecat06/comments/1290157.html</wfw:comment><comments>http://www.cnblogs.com/alonecat06/archive/2008/09/12/1290157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/alonecat06/comments/commentRss/1290157.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/alonecat06/services/trackbacks/1290157.html</trackback:ping><description><![CDATA[<p><font style="background-color: #f4f4f4;">考虑到将结题书贴出来的话，很多图片都没了，倒不如放在网络硬盘上，有兴趣的朋友可以去下载来看看。里面包括项目的结题书和软件的源代码。代码是VS2008，C#语言的，需要配合Office Project 2003才能运行。</font></p>
<p><font style="background-color: #f4f4f4;">
<a href="http://pickup.mofile.com/7223996672651421">下载文件</a>
</font></p><img src ="http://www.cnblogs.com/alonecat06/aggbug/1290157.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44378/" target="_blank">苏宁首战告捷 销售同比增六成</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>【整理】LISP简介</title><link>http://www.cnblogs.com/alonecat06/archive/2008/09/11/1285869.html</link><dc:creator>斌伯</dc:creator><author>斌伯</author><pubDate>Thu, 11 Sep 2008 10:48:00 GMT</pubDate><guid>http://www.cnblogs.com/alonecat06/archive/2008/09/11/1285869.html</guid><wfw:comment>http://www.cnblogs.com/alonecat06/comments/1285869.html</wfw:comment><comments>http://www.cnblogs.com/alonecat06/archive/2008/09/11/1285869.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/alonecat06/comments/commentRss/1285869.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/alonecat06/services/trackbacks/1285869.html</trackback:ping><description><![CDATA[张老师一直强调AutoCAD的开发有3种接口，vba,lisp,objectarx。objectarx功能强大，但学起来比较难。而vba和lisp就相对简单了。而且到时候用objectarx作出来的程序可以轻易调用lisp，所以只要做好lisp的话，也是可以最后汇总到我们的程序里面的。他希望项目组的其它同学能够使用Visual Lisp，参与到项目的开发中。于是我特地在网上百度了一下，收集整理了一些关于Lisp的信息。信息主要来源于百度百科的数个网页。
<p><br />
</p>
<p><strong>LISP的历史</strong> <br />
</p>
<p>LISP（全名LIST Processor，即链表处理语言），由约翰&#183;麦卡锡在1960年左右创造的一种基于<a target="_blank" href="http://baike.baidu.com/view/1179241.htm">&#955;演算</a>的函数式编程语言。</p>
<p>Lisp 代表 LISt Processing，即表处理，这种编程语言用来处理由括号（即&#8220;(&#8221;和&#8220;)&#8221;）构成的列表。约翰麦卡锡于1960年发表了一篇非凡的论文,他在这篇论文中对编程的贡献有如欧几里德对几何的贡献.[1] 他向我们展示了,在只给定几个简单的操作符和一个表示函数的记号的基础上, 如何构造出一个完整的编程语言. 麦卡锡称这种语言为Lisp, 意为List Processing, 因为他的主要思想之一是用一种简单的数据结构表(list)来代表代码和数据. <br />
值得注意的是,麦卡锡所作的发现,不仅是计算机史上划时代的大事, 而且是一种在我们这个时代编程越来越趋向的模式。可以说到目前为止只有两种真正干净利落, 始终如一的编程模式:C语言模式和Lisp语言模式。此二者就象两座高地, 在它们中间是尤如沼泽的低地.随着计算机变得越来越强大,新开发的语言一直在坚定地趋向于Lisp模式。二十年来,开发新编程语言的一个流行的秘诀是,取C语言的计算模式,逐渐地往上加Lisp模式的特性,例如运行时类型和无用单元收集。 </p>
<p> LISP有很多种方言，各个实现中的语言不完全一样。1980年代Guy L. Steele编写了Common Lisp试图进行标准化，这个标准被大多数解释器和编译器所接受。在Unix/Linux系统中，还有一种和<a target="_blank" href="http://baike.baidu.com/view/113220.htm">Emacs</a>一起的Emacs Lisp（而Emacs正是用Lisp编写的）非常流行，并建立了自己的标准。<br />
LISP的祖先是1950年代Carnegie-Mellon大学的Newell、Shaw、Simon开发的IPL语言。<br />
</p>
<p> LISP语言的主要现代版本包括Common Lisp和<a target="_blank" href="http://baike.baidu.com/view/459697.htm">Scheme</a>。</p>
<p>&nbsp;</p>
<p><strong>LISP有9大创新</strong></p>
<p>直到现在，越流行语言吸收的LISP元素越多，如python,ruby。LISP直到现在仍然被众多牛人推崇。当年LISP有9大创新，50年后，深刻影响了编程语言的进程。可见一个完善的理论被适当地应用，可以变得多么强大，焕发多么夺目的生机：   </p>
<blockquote>
<p>1.   条件语句。当初的语言是没有if else的，goto统治世界。<br />
2.   函数类型。函数成了语言里的类型，可以被变量指代，可以被当成参数传来传去（的一类公民的必要条件，参考SICP第一章）。这一条可以极大简化编程，让我们写出非常漂亮的程序。所以现在的流行语言纷纷加入了这个特性（可惜Java没有)。<br />
3.   递归。这个不用说了吧。<br />
4. 动态类型。smalltalk, python, ruby。。。连C#也有一个类似的var了。<br />
5.   垃圾收集。不要以为GC是Smalltalk的发明哈，更不是Java的。<br />
6.   基于表达式的编程。任何表达式都可以成为另一个表达式的一部分。不像很多语言，把表达和陈述分开。<br />
7.   符号类型。这个在python和ruby里被采用，广受欢迎。<br />
8.   代码即解析树。这个让LISP能方便地定义新的句法，操作程序本身，编写元程序，生成真正意义上的宏。<br />
</p>
<p>     9.   语言无时不在。代码运行/解析可以在任何时候发生。这点和8.配合可以让语言的扩展和交流变得非常容易。 </p>
</blockquote>
<p><strong></strong></p>
<p>&nbsp;</p>
<p><strong>基本介绍</strong></p>
<p> Lisp的表达式是一个原子(atom)或表(list)，原子(atom)是一个字母序列，如abc；表是由零个或多个表达式组成的序列，表达式之间用空格分隔开，放入一对括号中，如：<br />
abc<br />
()<br />
(abc xyz)<br />
(a b (c) d)<br />
最后一个表是由四个元素构成的，其中第三个元素本身也是一个表。<br />
</p>
<p>
正如算数表达式1+1有值2一样，Lisp中的表达式也有值，如果表达式e得出值v，我们说e返回v。如果一个表达式是一个表，那么我们把表中的第一个元素叫做操作符，其余的元素叫做自变量。</p>
<p>下面是一个在标准输出设备上输出Hello World的简单Common Lisp程序，这种程序通常作为开始学习编程语言时的第一个程序：(format t "Hello, world!~%")</p>
<p> </p>
<p>
<br />
</p>
<p>
<strong>Lisp的7个公理（基本操作符）</strong>：quote,atom,eq,car,cdr,cons,和 cond. <br />
</p>
<p>&nbsp;</p>
<ul>
    <li>
    (quote x)返回x，我们简记为'x</li>
</ul>
<ul>
    <li>
    (atom x)当x是一个原子或者空表时返回原子t，否则返回空表()。在Lisp中我们习惯用原子t表示真，而用空表()表示假。</li>
</ul>
<blockquote><blockquote>
<p>
&gt; (atom 'a)<br />
t<br />
&gt; (atom '(a b c))<br />
()<br />
&gt; (atom '())<br />
t<br />
现在我们有了第一个需要求出自变量值的操作符，让我们来看看quote操作符的作用——通过引用(quote)一个表，我们避免它被求值。一个未被引用的表达式作为自变量，atom将其视为代码，例如：<br />
&gt; (atom (atom 'a))<br />
t<br />
反之一个被引用的表仅仅被视为表<br />
&gt; (atom '(atom 'a))<br />
()<br />
</p>
<p>
引用看上去有些奇怪，因为你很难在其它语言中找到类似的概念，但正是这一特征构成了Lisp最为与众不同的特点——代码和数据使用相同的结构来表示，而我们用quote来区分它们。 </p>
</blockquote></blockquote>
<ul>
    <li>(eq x y)当x和y的值相同或者同为空表时返回t，否则返回空表()</li>
</ul>
<blockquote><blockquote>
&gt; (eq 'a 'a)<br />
t<br />
&gt; (eq 'a 'b)<br />
()<br />
&gt; (eq '() '())<br />
t<br />
</blockquote></blockquote>
<ul>
    <li>
    (car x)要求x是一个表，它返回x中的第一个元素，例如：</li>
</ul>
<blockquote><blockquote>
&gt; (car '(a b))<br />
a <br />
</blockquote></blockquote>
<ul>
    <li>
    (cdr x)同样要求x是一个表，它返回x中除第一个元素之外的所有元素组成的表，例如：</li>
</ul>
<blockquote><blockquote>
&gt; (cdr '(a b c))<br />
(b c) <br />
</blockquote></blockquote>
<ul>
    <li>
    (cons x y)要求y是一个表，它返回一个表，这个表的第一个元素是x，其后是y中的所有元素，例如：</li>
</ul>
<blockquote><blockquote>
&gt; (cons 'a '(b c))<br />
(a b c)<br />
</blockquote></blockquote><blockquote><blockquote>
&gt; (cons 'a (cons 'b (cons 'c ())))<br />
(a b c)<br />
</blockquote></blockquote>
<p>
</p>
<ul>
    <li>(cond (...) ...(...)) 的求值规则如下. p表达式依次求值直到有一个返回t. 如果能找到这样的p表达式,相应的e表达式的值作为整个cond表达式的返回值. </li>
</ul>
<blockquote><blockquote> &gt; (cond ((eq 'a 'b) 'first)<br />
((atom 'a) 'second))<br />
second<br />
</blockquote></blockquote>
<p> <strong>函数的表示 </strong><br />
当表达式以七个原始操作符中的五个开头时,它的自变量总是要求值的。 我们称这样的操作符为函数。接着我们定义一个记号来描述函数。函数表示为(lambda (...) e),其中 ...是原子(叫做参数),e是表达式。如果表达式的第一个元素形式如上 <br />
((lambda (...) e) ...) 则称为函数调用。它的值计算如下，每一个表达式先求值，然后e再求值。在e的求值过程中,每个出现在e中的的值是相应的在最近一次的函数调用中的值。<br />
&gt; ((lambda (x) (cons x '(b))) 'a)<br />
(a b)<br />
&gt; ((lambda (x y) (cons x (cdr y)))<br />
'z<br />
'(a b c))<br />
(z b c)<br />
如果一个表达式的第一个元素f是原子且f不是原始操作符 (f ...) 并且f的值是一个函数(lambda (...))，则以上表达式的值就是 ((lambda (...) e) ...) 的值。换句话说，参数在表达式中不但可以作为自变量也可以作为操作符使用: <br />
&gt; ((lambda (f) (f '(b c)))<br />
'(lambda (x) (cons 'a x)))<br />
(a b c)<br />
有另外一个函数记号使得函数能提及它本身,这样我们就能方便地定义递归函数。记号 (label f (lambda (...) e)) 表示一个象(lambda (...) e)那样的函数，加上这样的特性: 任何出现在e中的f将求值为此label表达式， 就好象f是此函数的参数。<br />
假设我们要定义函数(subst x y z)，它取表达式x，原子y和表z做参数,返回一个象z那样的表，不过z中出现的y(在任何嵌套层次上)被x代替。<br />
&gt; (subst 'm 'b '(a b (a b c) d))<br />
(a m (a m c) d)<br />
我们可以这样表示此函数 <br />
(label subst (lambda (x y z)<br />
(cond ((atom z)<br />
(cond ((eq z y) x)<br />
('t z)))<br />
('t (cons (subst x y (car z))<br />
(subst x y (cdr z)))))))<br />
我们简记f=(label f (lambda (...) e))为 <br />
(defun f (...) e) <br />
于是 <br />
(defun subst (x y z)<br />
(cond ((atom z)<br />
(cond ((eq z y) x)<br />
('t z)))<br />
('t (cons (subst x y (car z))<br />
(subst x y (cdr z))))))<br />
偶然地我们在这儿看到如何写cond表达式的缺省子句. 第一个元素是't的子句总是会成功的. 于是 <br />
(cond (x y) ('t z)) <br />
等同于我们在某些语言中写的 <br />
if x then y else z <br />
<br />
一些函数 <br />
既然我们有了表示函数的方法,我们根据七个原始操作符来定义一些新的函数. 为了方便我们引进一些常见模式的简记法. 我们用cxr,其中x是a或d的序列,来简记相应的car和cdr的组合. 比如(cadr e)是(car (cdr e))的简记,它返回e的第二个元素. <br />
&gt; (cadr '((a b) (c d) e))<br />
(c d)<br />
&gt; (caddr '((a b) (c d) e))<br />
e<br />
&gt; (cdar '((a b) (c d) e))<br />
(b)<br />
我们还用(list ...)表示(cons ...(cons '()) ...). <br />
&gt; (cons 'a (cons 'b (cons 'c '())))<br />
(a b c)<br />
&gt; (list 'a 'b 'c)<br />
(a b c)<br />
现在我们定义一些新函数. 我在函数名后面加了点,以区别函数和定义它们的原始函数,也避免与现存的common Lisp的函数冲突. <br />
<br />
(null. x)测试它的自变量是否是空表. <br />
(defun null. (x)<br />
(eq x '()))<br />
&gt; (null. 'a)<br />
()<br />
&gt; (null. '())<br />
t<br />
<br />
(and. x y)返回t如果它的两个自变量都是t, 否则返回(). <br />
(defun and. (x y)<br />
(cond (x (cond (y 't) ('t '())))<br />
('t '())))<br />
&gt; (and. (atom 'a) (eq 'a 'a))<br />
t<br />
&gt; (and. (atom 'a) (eq 'a 'b))<br />
()<br />
<br />
(not. x)返回t如果它的自变量返回(),返回()如果它的自变量返回t. <br />
(defun not. (x)<br />
(cond (x '())<br />
('t 't)))<br />
&gt; (not. (eq 'a 'a))<br />
()<br />
&gt; (not. (eq 'a 'b))<br />
t<br />
<br />
(append. x y)取两个表并返回它们的连结. <br />
(defun append. (x y)<br />
(cond ((null. x) y)<br />
('t (cons (car x) (append. (cdr x) y)))))<br />
&gt; (append. '(a b) '(c d))<br />
(a b c d)<br />
&gt; (append. '() '(c d))<br />
(c d)<br />
<br />
(pair. x y)取两个相同长度的表,返回一个由双元素表构成的表,双元素表是相应位置的x,y的元素对. <br />
(defun pair. (x y)<br />
(cond ((and. (null. x) (null. y)) '())<br />
((and. (not. (atom x)) (not. (atom y)))<br />
(cons (list (car x) (car y))<br />
(pair. (cdr) (cdr y))))))<br />
&gt; (pair. '(x y z) '(a b c))<br />
((x a) (y b) (z c))<br />
<br />
(assoc. x y)取原子x和形如pair.函数所返回的表y,返回y中第一个符合如下条件的表的第二个元素:它的第一个元素是x. <br />
(defun assoc. (x y)<br />
(cond ((eq (caar y) x) (cadar y))<br />
('t (assoc. x (cdr y)))))<br />
&gt; (assoc. 'x '((x a) (y b)))<br />
a<br />
&gt; (assoc. 'x '((x new) (x a) (y b)))<br />
new<br />
<br />
一个惊喜 <br />
因此我们能够定义函数来连接表,替换表达式等等.也许算是一个优美的表示法, 那下一步呢? 现在惊喜来了. 我们可以写一个函数作为我们语言的解释器:此函数取任意Lisp表达式作自变量并返回它的值. 如下所示: <br />
(defun eval. (e a)<br />
(cond <br />
((atom e) (assoc. e a))<br />
((atom (car e))<br />
(cond <br />
((eq (car e) 'quote) (cadr e))<br />
((eq (car e) 'atom) (atom (eval. (cadr e) a)))<br />
((eq (car e) 'eq) (eq (eval. (cadr e) a)<br />
(eval. (caddr e) a)))<br />
((eq (car e) 'car) (car (eval. (cadr e) a)))<br />
((eq (car e) 'cdr) (cdr (eval. (cadr e) a)))<br />
((eq (car e) 'cons) (cons (eval. (cadr e) a)<br />
(eval. (caddr e) a)))<br />
((eq (car e) 'cond) (evcon. (cdr e) a))<br />
('t (eval. (cons (assoc. (car e) a)<br />
(cdr e))<br />
a))))<br />
((eq (caar e) 'label)<br />
(eval. (cons (caddar e) (cdr e))<br />
(cons (list (cadar e) (car e)) a)))<br />
((eq (caar e) 'lambda)<br />
(eval. (caddar e)<br />
(append. (pair. (cadar e) (evlis. (cdr e) a))<br />
a)))))<br />
(defun evcon. (c a)<br />
(cond ((eval. (caar c) a)<br />
(eval. (cadar c) a))<br />
('t (evcon. (cdr c) a))))<br />
(defun evlis. (m a)<br />
(cond ((null. m) '())<br />
('t (cons (eval. (car m) a)<br />
(evlis. (cdr m) a)))))<br />
eval.的定义比我们以前看到的都要长. 让我们考虑它的每一部分是如何工作的. <br />
eval.有两个自变量: e是要求值的表达式, a是由一些赋给原子的值构成的表,这些值有点象函数调用中的参数. 这个形如pair.的返回值的表叫做环境. 正是为了构造和搜索这种表我们才写了pair.和assoc.. <br />
eval.的骨架是一个有四个子句的cond表达式. 如何对表达式求值取决于它的类型. 第一个子句处理原子. 如果e是原子, 我们在环境中寻找它的值: <br />
<br />
&gt; (eval. 'x '((x a) (y b)))<br />
a<br />
第二个子句是另一个cond, 它处理形如(a ...)的表达式, 其中a是原子. 这包括所有的原始操作符, 每个对应一条子句. <br />
<br />
&gt; (eval. '(eq 'a 'a) '())<br />
t<br />
&gt; (eval. '(cons x '(b c))<br />
'((x a) (y b)))<br />
(a b c)<br />
这几个子句(除了quote)都调用eval.来寻找自变量的值. <br />
最后两个子句更复杂些. 为了求cond表达式的值我们调用了一个叫 evcon.的辅助函数. 它递归地对cond子句进行求值,寻找第一个元素返回t的子句. 如果找到了这样的子句, 它返回此子句的第二个元素. <br />
<br />
&gt; (eval. '(cond ((atom x) 'atom)<br />
('t 'list))<br />
'((x '(a b))))<br />
list<br />
第二个子句的最后部分处理函数调用. 它把原子替换为它的值(应该是lambda 或label表达式)然后对所得结果表达式求值. 于是 <br />
<br />
(eval. '(f '(b c))<br />
'((f (lambda (x) (cons 'a x)))))<br />
变为 <br />
(eval. '((lambda (x) (cons 'a x)) '(b c))<br />
'((f (lambda (x) (cons 'a x)))))<br />
它返回(a b c). <br />
eval.的最后cond两个子句处理第一个元素是lambda或label的函数调用.为了对label 表达式求值, 先把函数名和函数本身压入环境, 然后调用eval.对一个内部有 lambda的表达式求值. 即: <br />
<br />
(eval. '((label firstatom (lambda (x)<br />
(cond ((atom x) x)<br />
('t (firstatom (car x))))))<br />
y)<br />
'((y ((a b) (c d)))))<br />
变为 <br />
(eval. '((lambda (x)<br />
(cond ((atom x) x)<br />
('t (firstatom (car x)))))<br />
y)<br />
'((firstatom<br />
(label firstatom (lambda (x)<br />
(cond ((atom x) x)<br />
('t (firstatom (car x)))))))<br />
(y ((a b) (c d)))))<br />
最终返回a. <br />
最后,对形如((lambda (...) e) ...)的表达式求值,先调用evlis.来求得自变量(...)对应的值(...),把()...()添加到环境里, 然后对e求值. 于是 <br />
<br />
(eval. '((lambda (x y) (cons x (cdr y)))<br />
'a<br />
'(b c d))<br />
'())<br />
变为 <br />
(eval. '(cons x (cdr y))<br />
'((x a) (y (b c d))))<br />
最终返回(a c d). <br />
后果 <br />
既然理解了eval是如何工作的, 让我们回过头考虑一下这意味着什么. 我们在这儿得到了一个非常优美的计算模型. 仅用quote,atom,eq,car,cdr,cons,和cond, 我们定义了函数eval.,它事实上实现了我们的语言,用它可以定义任何我们想要的额外的函数. <br />
当然早已有了各种计算模型--最著名的是图灵机. 但是图灵机程序难以读懂. 如果你要一种描述算法的语言, 你可能需要更抽象的, 而这就是约翰麦卡锡定义 Lisp的目标之一. <br />
约翰麦卡锡于1960年定义的语言还缺不少东西. 它没有副作用, 没有连续执行 (它得和副作用在一起才有用), 没有实际可用的数,没有动态可视域. 但这些限制可以令人惊讶地用极少的额外代码来补救. Steele和Sussman在一篇叫做&#8220;解释器的艺术&#8221;的著名论文中描述了如何做到这点。<br />
如果你理解了约翰麦卡锡的eval, 那你就不仅仅是理解了程序语言历史中的一个阶段. 这些思想至今仍是Lisp的语义核心. 所以从某种意义上, 学习约翰麦卡锡的原著向我们展示了Lisp究竟是什么. 与其说Lisp是麦卡锡的设计,不如说是他的发现. 它不是生来就是一门用于人工智能, 快速原型开发或同等层次任务的语言. 它是你试图公理化计算的结果(之一). <br />
</p>
<p> 随着时间的推移, 中级语言, 即被中间层程序员使用的语言, 正一致地向Lisp靠近. 因此通过理解eval你正在明白将来的主流计算模式会是什么样. </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>后记：细看LISP的代码，就可以看到，正如Woodpecker.org.cn上的一个网页（http://wiki.woodpecker.org.cn/moin/Lisp，该网页有相当多的Lisp资源）所说，LISP<tt>语法解析树的前缀表达。可能是我看惯C风格的程序，一时半会还不习惯，甚至觉得这个LISP比起ObjectARX难多了。不过在这短短的数小时内，通过数个网页增进了对LISP的了解，虽然还未能消化得了，但今后还有更多深入研究的时间，希望能够把LISP的威力发挥出来。</tt></p>
<p>&nbsp;</p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/alonecat06/aggbug/1285869.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44377/" target="_blank">福布斯：虚拟化技术登陆Mac平台</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>【转载】匈牙利表示法</title><link>http://www.cnblogs.com/alonecat06/archive/2008/09/07/1286320.html</link><dc:creator>斌伯</dc:creator><author>斌伯</author><pubDate>Sun, 07 Sep 2008 11:06:00 GMT</pubDate><guid>http://www.cnblogs.com/alonecat06/archive/2008/09/07/1286320.html</guid><wfw:comment>http://www.cnblogs.com/alonecat06/comments/1286320.html</wfw:comment><comments>http://www.cnblogs.com/alonecat06/archive/2008/09/07/1286320.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/alonecat06/comments/commentRss/1286320.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/alonecat06/services/trackbacks/1286320.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>近来学MFC，看到很多的变量命名都觉得很诡异，但又觉得其中必有一定的规律。看了该文章后才茅塞顿开，原来变量的命名也有大学问在里头。&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体;">匈牙利表示法：</span></p>
<p>
&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">它通过在每一个表示符名字的前面放置一个数据类型助记符，为程序员提供了对标识符的即时识别。</span></p>
<p>1.MFC<span style="font-family: 宋体;">、句柄、控件及结构的命名规则。</span></p>
<table style="border: medium none ; margin-left: 27pt; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">Windows<span style="font-family: 宋体;">类型</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center"><span style="font-family: 宋体;">样本变量</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">MFC<span style="font-family: 宋体;">类</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center"><span style="font-family: 宋体;">样本对象</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HWND</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hWnd</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CWnd*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pWnd</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HDLG</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hDlg</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CDialog*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pDlg</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HDC</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hDC</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CDC*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pDC</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HGDIOBJ</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hGdiObj</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CGdiObject*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pGdiObj</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HPEN</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hPen</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CPen*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pPen</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HBRUSH</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hBrush</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CBrush*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pBrush</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HFONT</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hFont</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CFont*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pFont</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HBITMAP</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hBitmap</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CBitmap*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pBitmap</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HPALETTE</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hpalette</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CPalette*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pPalette</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HRGN</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hRgn</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CRgn*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pRgn</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HMENU</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hMenu</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CMenu*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pMenu</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HWND</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hCtl</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CState*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pState</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HWND</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hCtl</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CButton*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pButton</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HWND</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hCtl</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CEdit*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pEdit</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HWND</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hCtl</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CListBox*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pListBox</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HWND</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hCtl</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CComboBox*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pComboBox</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HWND</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hCtl</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CScrollBar*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pScrollBar</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">HSZ</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">hszStr</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CString</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pStr</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">POINT</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">pt</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CPoint</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">pt</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">SIZE</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">size</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CSize</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">size</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">RECT</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">rect</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 74.6pt;" valign="top" width="99">
        <p align="center">CRet</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 64.5pt;" valign="top" width="86">
        <p align="center">rect</p>
        </td>
    </tr>
</table>
<p>&nbsp;</p>
<p>2.<span style="font-family: 宋体;">一般前缀命名规范</span></p>
<table style="border: medium none ; margin-left: 27pt; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td style="padding: 0cm 5.4pt; width: 90pt;" valign="top" width="120">
        <p align="center"><span style="font-family: 宋体;">前缀</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 88.9pt;" valign="top" width="119">
        <p align="center"><span style="font-family: 宋体;">类型</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 123.5pt;" valign="top" width="165">
        <p align="center"><span style="font-family: 宋体;">实例</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 90pt;" valign="top" width="120">
        <p align="center">C</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 88.9pt;" valign="top" width="119">
        <p align="center"><span style="font-family: 宋体;">类或结构</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 123.5pt;" valign="top" width="165">
        <p align="center">CDocument,CPrintInfo</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 90pt;" valign="top" width="120">
        <p align="center">m_</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 88.9pt;" valign="top" width="119">
        <p align="center"><span style="font-family: 宋体;">成员变量</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 123.5pt;" valign="top" width="165">
        <p align="center">m_pDoc,</p>
        </td>
    </tr>
</table>
<p>&nbsp;</p>
<p>3.<span style="font-family: 宋体;">变量名规范</span></p>
<table style="border: medium none ; margin-left: 36.25pt; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center"><span style="font-family: 宋体;">前缀</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center"><span style="font-family: 宋体;">类型</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center"><span style="font-family: 宋体;">描述</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center"><span style="font-family: 宋体;">实例</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p style="margin-left: -7.55pt; text-align: center; text-indent: 6.7pt;" align="center">ch</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">char</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center">8<span style="font-family: 宋体;">为字符</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">chGrade</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center">ch</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">TCHAR</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center"><span style="font-family: 宋体;">如果</span>_UNICODE<span style="font-family: 宋体;">定义，为</span>16<span style="font-family: 宋体;">位字符</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">chName</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center">b</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">BOOL</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center"><span style="font-family: 宋体;">布尔值</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">bEnabled</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center">n</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">int</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center"><span style="font-family: 宋体;">整型（其大小依赖于操作系统）</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">nLength</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center">n</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">UNIT</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center"><span style="font-family: 宋体;">无符号值（其大小依赖于操作系统）</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">nLength</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center">w</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">WORD</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center">16<span style="font-family: 宋体;">位无符号值</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">wPos</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center">l</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">LONG</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center">32<span style="font-family: 宋体;">位有符号整型</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">lOffset</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center">dw</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">DWORD</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center">32<span style="font-family: 宋体;">位无符号整型</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">dwRange</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center">p</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center"><span style="font-family: 宋体;">指针</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">pDoc</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center">lp</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">FAR*</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center"><span style="font-family: 宋体;">远指针</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">lpDoc</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center">lpsz</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">LPSTR</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center">32<span style="font-family: 宋体;">位字符串指针</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">lpszName</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center">lpsz</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">LPCTSTR</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center"><span style="font-family: 宋体;">如果</span>_UNICODE<span style="font-family: 宋体;">定义，位</span>32<span style="font-family: 宋体;">位常量字符串指针</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">lpszName</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center">h</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">handle</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center">Windows<span style="font-family: 宋体;">对象句柄</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">hWnd</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 36pt;" valign="top" width="48">
        <p align="center">lpfn</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">callback</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.3pt;" valign="top" width="232">
        <p align="center"><span style="font-family: 宋体;">指向</span>CALLBACK<span style="font-family: 宋体;">函数的远指针</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 52.8pt;" valign="top" width="70">
        <p align="center">lpfnAbort</p>
        </td>
    </tr>
</table>
<p>&nbsp;</p>
<p>4.<span style="font-family: 宋体;">应用程序符号命名规范</span></p>
<p>&nbsp;</p>
<table style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td style="padding: 0cm 5.4pt; width: 50.4pt;" valign="top" width="67">
        <p align="center"><span style="font-family: 宋体;">前缀</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 143.65pt;" valign="top" width="192">
        <p align="center"><span style="font-family: 宋体;">符号类型</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 126.35pt;" valign="top" width="168">
        <p align="center"><span style="font-family: 宋体;">实例</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center"><span style="font-family: 宋体;">范围</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 50.4pt;" valign="top" width="67">
        <p align="center">IDR_</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 143.65pt;" valign="top" width="192">
        <p align="center"><span style="font-family: 宋体;">不同类型的多个资源共享标识</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 126.35pt;" valign="top" width="168">
        <p align="center">IDR_MAINFRAME</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">1-0x6FFF</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 50.4pt;" valign="top" width="67">
        <p align="center">IDD_</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 143.65pt;" valign="top" width="192">
        <p align="center"><span style="font-family: 宋体;">对话框资源</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 126.35pt;" valign="top" width="168">
        <p align="center">IDD_SPELL_CHECK</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">...</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 50.4pt;" valign="top" width="67">
        <p align="center">HIDD_</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 143.65pt;" valign="top" width="192">
        <p align="center"><span style="font-family: 宋体;">对话框资源的</span>Help<span style="font-family: 宋体;">上下文</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 126.35pt;" valign="top" width="168">
        <p align="center">HIDD_SPELL_CHECK</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">0X20001-0X26FF</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 50.4pt;" valign="top" width="67">
        <p align="center">IDB_</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 143.65pt;" valign="top" width="192">
        <p align="center"><span style="font-family: 宋体;">位图资源</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 126.35pt;" valign="top" width="168">
        <p align="center">IDB_COMPANY_LOGO</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">1-0X6FFF</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 50.4pt;" valign="top" width="67">
        <p align="center">IDC_</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 143.65pt;" valign="top" width="192">
        <p align="center"><span style="font-family: 宋体;">光标资源</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 126.35pt;" valign="top" width="168">
        <p align="center">IDC_PENCIL</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">...</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 50.4pt;" valign="top" width="67">
        <p align="center">IDI_</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 143.65pt;" valign="top" width="192">
        <p align="center"><span style="font-family: 宋体;">图表资源</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 126.35pt;" valign="top" width="168">
        <p align="center">IDI_NOTEPAD</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">...</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 50.4pt;" valign="top" width="67">
        <p align="center">ID_</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 143.65pt;" valign="top" width="192">
        <p align="center"><span style="font-family: 宋体;">来自菜单项或工具栏的命令</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 126.35pt;" valign="top" width="168">
        <p align="center">ID_TOOLS_SPELLING</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">0x8000-0xDFFF</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 50.4pt;" valign="top" width="67">
        <p align="center">HID_</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 143.65pt;" valign="top" width="192">
        <p align="center"><span style="font-family: 宋体;">命令</span>Help<span style="font-family: 宋体;">上下文</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 126.35pt;" valign="top" width="168">
        <p align="center">HID_TOOLS_SPELLING</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">...</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 50.4pt;" valign="top" width="67">
        <p align="center">IDP_</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 143.65pt;" valign="top" width="192">
        <p align="center"><span style="font-family: 宋体;">消息框提示</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 126.35pt;" valign="top" width="168">
        <p align="center">IDP_INVALID_PARINO</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">8-0xDFFF</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 50.4pt;" valign="top" width="67">
        <p align="center">HIDP_</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 143.65pt;" valign="top" width="192">
        <p align="center"><span style="font-family: 宋体;">消息框</span>Help<span style="font-family: 宋体;">上下文</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 126.35pt;" valign="top" width="168">
        <p align="center">HIDP_INVALID_PARINO</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">0X30008-0x3DFFF</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 50.4pt;" valign="top" width="67">
        <p align="center">IDS_</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 143.65pt;" valign="top" width="192">
        <p align="center"><span style="font-family: 宋体;">串资源</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 126.35pt;" valign="top" width="168">
        <p align="center">IDS_COPYRIGHT</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">1-0x7FFF</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 50.4pt;" valign="top" width="67">
        <p align="center">IDC_</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 143.65pt;" valign="top" width="192">
        <p align="center"><span style="font-family: 宋体;">对话框内的控件</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 126.35pt;" valign="top" width="168">
        <p align="center">IDC_RECALC</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">8-0xDFFF</p>
        </td>
    </tr>
</table>
<p>&nbsp;</p>
<p>5.Microsoft MFC<span style="font-family: 宋体;">宏命名规范</span></p>
<table style="border: medium none ; margin-left: 23.4pt; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center"><span style="font-family: 宋体;">名称</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 161.7pt;" valign="top" width="216">
        <p align="center"><span style="font-family: 宋体;">类型</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">_AFXDLL</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 161.7pt;" valign="top" width="216">
        <p align="center"><span style="font-family: 宋体;">唯一的动态连接库（</span>Dynamic</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">_ALPHA</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 161.7pt;" valign="top" width="216">
        <p align="center"><span style="font-family: 宋体;">仅编译</span>DEC</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">_DEBUG</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 161.7pt;" valign="top" width="216">
        <p align="center"><span style="font-family: 宋体;">包括诊断的调式版本</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">_MBCS</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 161.7pt;" valign="top" width="216">
        <p align="center"><span style="font-family: 宋体;">编译多字节字符集</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">_UNICODE</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 161.7pt;" valign="top" width="216">
        <p align="center"><span style="font-family: 宋体;">在一个应用程序中打开</span>Unicode</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">AFXAPI</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 161.7pt;" valign="top" width="216">
        <p align="center">MFC<span style="font-family: 宋体;">提供的函数</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">CALLBACK</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 161.7pt;" valign="top" width="216">
        <p align="center"><span style="font-family: 宋体;">通过指针回调的函数</span></p>
        </td>
    </tr>
</table>
<p>&nbsp;</p>
<p>6.<span style="font-family: 宋体;">库标识命名规范</span></p>
<table style="border: medium none ; margin-left: 23.4pt; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td style="padding: 0cm 5.4pt; width: 63pt;" valign="top" width="84">
        <p align="center"><span style="font-family: 宋体;">指示符</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 198pt;" valign="top" width="264">
        <p align="center"><span style="font-family: 宋体;">值和含义</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 63pt;" valign="top" width="84">
        <p align="center">u</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 198pt;" valign="top" width="264">
        <p align="center">ANSI<span style="font-family: 宋体;">（</span>N<span style="font-family: 宋体;">）或</span>Unicodeu<span style="font-family: 宋体;">（</span>U<span style="font-family: 宋体;">）</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 63pt;" valign="top" width="84">
        <p align="center">d</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 198pt;" valign="top" width="264">
        <p align="center"><span style="font-family: 宋体;">调试或发行：</span>D=<span style="font-family: 宋体;">调式；忽略指示符为发行</span></p>
        </td>
    </tr>
</table>
<p>&nbsp;</p>
<p>7.<span style="font-family: 宋体;">静态库版本命名规范</span></p>
<table style="border: medium none ; margin-left: 14.4pt; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center"><span style="font-family: 宋体;">库</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.95pt;" valign="top" width="233">
        <p align="center"><span style="font-family: 宋体;">描述</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">NAFXCWD.LIB</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.95pt;" valign="top" width="233">
        <p align="center"><span style="font-family: 宋体;">调试版本：</span>MFC<span style="font-family: 宋体;">静态连接库</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">NAFXCW.LIB</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.95pt;" valign="top" width="233">
        <p align="center"><span style="font-family: 宋体;">发行</span>...</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">UAFXCWD.LIB</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.95pt;" valign="top" width="233">
        <p align="center"><span style="font-family: 宋体;">调试版本：具有</span>Unicode<span style="font-family: 宋体;">支持的</span>MFC<span style="font-family: 宋体;">静态连接库</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 99pt;" valign="top" width="132">
        <p align="center">UAFXCW.LIB</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 174.95pt;" valign="top" width="233">
        <p align="center"><span style="font-family: 宋体;">发行</span>...</p>
        </td>
    </tr>
</table>
<p>&nbsp;</p>
<p>8.<span style="font-family: 宋体;">动态库连接命名规范</span></p>
<table style="border: medium none ; margin-left: 14.4pt; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center"><span style="font-family: 宋体;">名称</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 156.3pt;" valign="top" width="208">
        <p align="center"><span style="font-family: 宋体;">类型</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">_AFXDLL</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 156.3pt;" valign="top" width="208">
        <p align="center"><span style="font-family: 宋体;">唯一的动态连接库（</span>DLL<span style="font-family: 宋体;">）版本</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 81pt;" valign="top" width="108">
        <p align="center">WINAPI</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 156.3pt;" valign="top" width="208">
        <p align="center">Windows<span style="font-family: 宋体;">所提供的函数</span></p>
        </td>
    </tr>
</table>
<p>&nbsp;</p>
<p>9.Windows.h<span style="font-family: 宋体;">命名规范</span></p>
<table style="border: medium none ; margin-left: 14.4pt; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0" height="333" width="562">
    <tr>
        <td style="padding: 0cm 5.4pt; width: 63pt;" valign="top" width="84">
        <p align="center"><span style="font-family: 宋体;">类型定义</span></p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 270pt;" valign="top" width="360">
        <p align="center"><span style="font-family: 宋体;">描述</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 63pt;" valign="top" width="84">
        <p align="center">WINAPI</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 270pt;" valign="top" width="360">
        <p align="center"><span style="font-family: 宋体;">使用在</span>API<span style="font-family: 宋体;">自己的</span>API<span style="font-family: 宋体;">中使用该类型</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 63pt;" valign="top" width="84">
        <p align="center">CALLBACK</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 270pt;" valign="top" width="360">
        <p align="center"><span style="font-family: 宋体;">使用在应用程序回叫例程如窗口和对话框中的</span>FAR</p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 63pt;" valign="top" width="84">
        <p align="center">LPCSTR</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 270pt;" valign="top" width="360">
        <p align="center"><span style="font-family: 宋体;">与</span>LPSTR<span style="font-family: 宋体;">相同，但</span>LPCSTR<span style="font-family: 宋体;">用于只读串指针，其定义类似于（</span>const char FAR*<span style="font-family: 宋体;">）</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 63pt;" valign="top" width="84">
        <p align="center">UNIT</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 270pt;" valign="top" width="360">
        <p align="center"><span style="font-family: 宋体;">与可移值的无符号整型类型，其大小由主机环境决定（对</span>Windows NT<span style="font-family: 宋体;">和</span>Windows 95<span style="font-family: 宋体;">为</span>32<span style="font-family: 宋体;">位）。它是</span>unsigned int<span style="font-family: 宋体;">的同义词，使用</span>WORD<span style="font-family: 宋体;">位置，在一个</span>32<span style="font-family: 宋体;">位的平台上希望得到一个</span>16<span style="font-family: 宋体;">为无符号值的极少数情况除外</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 63pt;" valign="top" width="84">
        <p align="center">LRESULT</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 270pt;" valign="top" width="360">
        <p align="center"><span style="font-family: 宋体;">窗口程序返回值的类型</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 63pt;" valign="top" width="84">
        <p align="center">LPARAM</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 270pt;" valign="top" width="360">
        <p align="center"><span style="font-family: 宋体;">声明</span>lParam<span style="font-family: 宋体;">所使用的类型，</span>lParam <span style="font-family: 宋体;">是窗口程序的第四个参数</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 63pt;" valign="top" width="84">
        <p align="center">WPARAM</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 270pt;" valign="top" width="360">
        <p align="center"><span style="font-family: 宋体;">声明</span>wParam<span style="font-family: 宋体;">所使用的类型，</span> wParam<span style="font-family: 宋体;">是窗口程序的第三个参数（一种组合数据类型）</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding: 0cm 5.4pt; width: 63pt;" valign="top" width="84">
        <p align="center">LPVOID</p>
        </td>
        <td style="padding: 0cm 5.4pt; width: 270pt;" valign="top" width="360">
        <p align="center"><span style="font-family: 宋体;">一般的指针类型，与（</span>void*<span style="font-family: 宋体;">）等同。应该使用它来代替</span>LPSTR<span style="font-family: 宋体;">。</span></p>
        </td>
    </tr>
</table><img src ="http://www.cnblogs.com/alonecat06/aggbug/1286320.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44376/" target="_blank">微软CEO信誓旦旦:Windows 7将成最出色操作系统</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>【转载】宏定义的经典错误</title><link>http://www.cnblogs.com/alonecat06/archive/2008/07/25/1250938.html</link><dc:creator>斌伯</dc:creator><author>斌伯</author><pubDate>Thu, 24 Jul 2008 16:12:00 GMT</pubDate><guid>http://www.cnblogs.com/alonecat06/archive/2008/07/25/1250938.html</guid><wfw:comment>http://www.cnblogs.com/alonecat06/comments/1250938.html</wfw:comment><comments>http://www.cnblogs.com/alonecat06/archive/2008/07/25/1250938.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/alonecat06/comments/commentRss/1250938.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/alonecat06/services/trackbacks/1250938.html</trackback:ping><description><![CDATA[<p>在百度知道中看到一则经典的宏定义错误。鉴于MFC，Windows SDK中将有很多宏定义的东西，特此记录，以作提醒。</p>
<p>&nbsp;</p>
<p>#define S(x) x*x  <br />
int y,z=10;  <br />
y = S(z+1)  <br />
<br />
等价于 <br />
int y,z=10; <br />
y = z+1*z+1 <br />
所以y=10+1*10+1=21 <br />
<br />
如果 <br />
#define S(x) (x)*(x)  <br />
int y,z=10;  <br />
y = S(z+1)  <br />
等价于 <br />
int y,z=10; <br />
y = (z+1)*(z+1) <br />
所以y=11*11=121 <br />
<br />
宏定义只是简单的文字替换，只要按照替换规则小心替换，然后求值即可 <br />
</p><img src ="http://www.cnblogs.com/alonecat06/aggbug/1250938.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44375/" target="_blank">趣闻:李开复其实是跳舞机高手</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>【转载】使用ObjectARX 2005+Visual Studio.NET 2003创建ARX程序</title><link>http://www.cnblogs.com/alonecat06/archive/2008/07/15/1243618.html</link><dc:creator>斌伯</dc:creator><author>斌伯</author><pubDate>Tue, 15 Jul 2008 11:04:00 GMT</pubDate><guid>http://www.cnblogs.com/alonecat06/archive/2008/07/15/1243618.html</guid><wfw:comment>http://www.cnblogs.com/alonecat06/comments/1243618.html</wfw:comment><comments>http://www.cnblogs.com/alonecat06/archive/2008/07/15/1243618.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/alonecat06/comments/commentRss/1243618.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/alonecat06/services/trackbacks/1243618.html</trackback:ping><description><![CDATA[<font id="remark_view" style="font-size: 14px;">使用ObjectARX进行AutoCAD的开发，第一步当然是环境的配置啦。ObjectARX在2006之前都大量使用了VC++ 7.0的技术，使用它，最好是搭配Visual Studio 2002。但VS2002已经很难找到，相比之下VS2003在网络比较多见。下文就是介绍如何使用ObjectARX2005＋Visual Studio.NET 2003搭建开发环境的：<br />
<br />
<p>我是在一个偶然的机会接触到
ARX的，其实原来对于CAD的二次开发接触并不多，这方面的积累也不够充分，但既然已经涉及到这个领域，那么就希望学到这个领域最领先的知识。在翻阅了
一些前辈的大作、浏览了很多网页后发现ARX的强大功能是大家公认的，但是由于开发人员的稀缺和软件的更新换代，ARX的学习资料不是很多，特别是在.
net平台下开发ARX的资料就更少了。下面的文章中我将给大家讲讲ARX入门的经验，希望大家少走弯路，有经验大家可以一起交流。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
相信大家已经拜读过金建承老师的文章《为什么要学ARX》，对ARX已经有所了解，那么接下来的问题就是怎样学好ARX。明经通道中有相关的文章，但总归
是几年以前的，现在大家已经逐渐接受在.net平台下开发，那些文章总让人觉得不合时宜。下面的文章中假定你毫无ARX开发经验，我们将按惯例一步步的推
进。</p>
<p>一、基础知识</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用ARX在.net平台下开发首先应该具备C++和AutoCAD的基础知识，如果不会可以现学，反正这方面的资料很多，折腾一段时间拿下应该不成问题。</p>
<p>二、下载软件包</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 必备软件是ObjectARX 和.net平台，当然为了能运行编译出来的.arx文件还需要AutoCAD平台。ObjectARX软件包可以在<a href="http://www.autodesk.com/objectarx">http://www.autodesk.com/objectarx</a>
免费下载，.net平台和AutoCAD平台就需要自备了。我选用的版本是ObjectARX 2005+Visual Studio.NET
2003，可以说是现在最新版本的组合。ObjectARX软件包和.net平台经常会出现不兼容的情形，据说Autodesk公司已经作出了改进，但我
在安装和编译过程中还是遇到了不少问题。ObjectARX 2004和ObjectARX 2005在 Visual Studio.NET
2002下都能正常的工作，但在Visual Studio.NET 2003下却多少有些问题，ObjectARX
2004甚至都不能安装ObjectARX Wizard（.msi文件），ObjectARX
2005可以安装，但编译的时候会存在问题。分析其原因是因为在ObjectARX 软件包中会调用或是验证大量VC7.0的库，而Visual
Studio.NET 2003的VC版本是7.1，因而会存在问题，Visual Studio.NET
2002的VC版本是7.0，所以可以顺利使用。我机器上装的是Visual Studio.NET
2003，没有办法，这个系统太庞大了，总不能把它卸了，再重装Visual Studio.NET 2002吧！所以最后只好使用ObjectARX
2005+ Visual Studio.NET
2003，安装没问题，但在编译的时候出现有几个VC7.0的文件找不到。通过反复验证，只要把Visual Studio.NET
2003根目录下"Vc7"atlmfc"lib文件夹中所有文件名类似**71**的文件在Visual Studio.NET
2002中相应的拷贝到文件夹里就可以了。具体有以下这些：mfc70.lib
mfc70d.lib、mfc70u.lib、mfc70ud.lib、mfcs70.lib、mfcs70.pdb、mfcs70d.lib、
mfcs70d.pdb、mfcs70u.lib、mfcs70u.pdb、mfcs70ud.lib、mfcs70ud.pdb。（<a href="http://www.objectarx.net/index.php?option=com_remository&amp;Itemid=0&amp;func=download&amp;filecatid=9&amp;chk=d85495e21c5f9d188535cfac17c8980c">VC7.0的库函数包</a>）到现在为止，软件包的安装可以告一段落了。</p>
<p>三、创建最简单的ARX程序</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
在下面的文章中我将通过一个最简单的实例来讲述ARX程序的创建过程，介绍编制Object
ARX程序的一些基本步骤和原则，并初步了解ARX程序与AutoCAD进行通讯的方式。这一节的大部分内容在Object ARX
2005自带培训教程ObjectARXLabs.chm中都有，喜欢看英文原文的朋友可以自己去下载浏览。如同学习其它计算机语言一样，我们首先来创建
一个最简单的ARX程序——&#8220;Step01.ARX&#8221;，在AutoCAD 2005中加载并运行该程序，将会在命令行出现－&#8220;Hello,
world!&#8221;。</p>
<p>我们首先来看看建立ARX程序的基本步骤：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于ARX程序是一种可以共享AutoCAD地址空间并对AutoCAD进行直接调用的动态链接库，因此可以按照下列基本步骤建立ARX程序：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1) 创建自定义类来实现新的命令：用户可以从ARX类层次关系中的大多数类和符号表类中派生自己的类。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2) 决定ARX程序应该响应的AutoCAD消息：AutoCAD通过向ARX程序发出一系列的消息指明在它内部发生的特殊事件，ARX程序必须对其中的某些消息作出反映，并触发相应的操作。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(3)
实现应用程序与AutoCAD通信的入口：AutoCAD通过函数acrxEntryPoint()来调用ARX程序，而不是象普通的C++程序那样使用
main()函数。函数acrxEntryPoint()中可以用switch语句处理AutoCAD的各种返回信息，根据不同信息执行不同的函数，并返
回状态码。如果针对特定的消息返回出错代码，则必须用case语句来处理。最后，必须用AcRx::kRetOk作为函数acrxEntryPoint
()的最终返回值。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (4)
完成ARX程序的初始化：用户必须在acrxEntryPoint()函数的AcRx::kInitAppMsg事件中或者该事件调用的函数（例如：
initApp（）函数）中，对程序中自定义的所有类进行初始化，然后调用acedRegCmds-&gt;addCommand()函数在
AutoCAD命令堆栈中注册新命令。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (5)
实现卸载（Unload）功能：用户必须在acrxEntryPoint()函数的AcRx::
kUnloadAppMsg事件中或者该事件调用的函数（例如：unloadApp（）函数）中，调用acedRegCmds-&gt;
removeGroup()函数将initApp（）函数中注册的新命令组从AutoCAD命令堆栈中清除，调用deleteAcRxClass()函数
清除程序中自定义的任何类，然后删除所有由应用程序添加到AutoCAD中的对象，并清除所有与AcDbObject、AcDbDatabase、
AcRxDynamicLinker或AcEditor对象相关联的事件反应器。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意
缺省情况下，ARX程序处于被锁定状态而不能被卸载，如果要使ARX程序可以被卸载，需保存由AcRx::kInitAppMsg传送的appId参数，
由unlockApplication()函数调用，见acrxEntryPoint ()函数注释。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们还需要了解AutoCAD与ARX程序之间的消息传递，AutoCAD向ARX程序发送四类消息：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1) 发送给所有ARX程序的消息：kInitAppMsg、kUnloadAppMsg、kLoadDwgMsg、kPreQuitMsg。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2) 只发送给通过调用acedDefun() 函数注册AutoLISP函数的ARX程序的消息：kUnloadDwgMsg、kInvkSubrMsg、kEndMsg、kQuitMsg、kSaveMsgkCfgMsg。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3) 只发送给注册service对象的ARX程序的消息：kDependencyMsg、kNoDependencyMsg。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (4) 只发送给使用ActiveX控件对象的ARX程序的消息：kOleUnloadAppMsg。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 普通的ARX程序仅需要响应消息kInitAppMsg和kUnloadAppMsg，这两种消息的含义和ARX程序对它们的响应方式为：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(1) 消息kInitAppMsg：当AutoCAD
加载ObjectARX应用程序并开始进行与应用程序的通信时发送此消息。对于此消息，ARX程序应该注册服务对象、类、AcEd命令和事件反应器，以及
AcRxDynamicLinker类事件反应器，初始化应用程序的系统资源（如设备、窗口），并执行简单的初始化操作；这时，AcRx、AcEd和
AcGe类库都应该被激活；如果需要对应用程序进行解锁或重新加锁操作，还应该保存pkt参数。但是这里不能进行下列操作：初始化设备驱动程序、激活用户
界面资源、按特殊顺序加载应用程序、执行AutoLISP程序以及打开任何数据库，否则将导致错误发生或者系统崩溃；AcDb和AcGi类库也不能在这里
激活，尽管它们与AcRx 和其它结构有联系。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)
消息kUnloadAppMsg：当ObjectARX程序被卸载时（由用户卸载或者AutoCAD程序终止时），AutoCAD发送此消息，关闭当前文
件并执行清除操作。对于此消息，ARX程序应该清除所有系统资源，所有对kInitAppMsg消息所做的初始化等工作都应该在这里被终止或者析构。
AutoCAD不会自动解除初始化所做的工作。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面我们将看到怎样在.NET环境下建立一个ObjectARX工程，并创建第一个ARX程序——&#8220;Step01.ARX&#8221;。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第一步： 创建工程</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1) 运行Visual Studio.NET，选择菜单命令New-&gt;Project&#8230;.，弹出&#8220;Project&#8221;对话框。</p>
<p align="center"><img onmousewheel="return bbimg(this)" alt="" src="http://www.ugcn.cn/upload/article/UploadPic/2008-2/2008229225510372.jpg" onload="javascript:resizepic(this)" border="0" hspace="0" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2) 在&#8220;Project&#8221;对话框的&#8220;Project Types:&#8221;中展开&#8220;VC++ Projects&#8221;选项，选择&#8220;Win32 Project&#8221;。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3) 输入工程名称，如图所示为&#8220;Step01&#8221;，选择工程在硬盘中存放的路径。</p>
<p align="center"><img onmousewheel="return bbimg(this)" alt="" src="http://www.ugcn.cn/upload/article/UploadPic/2008-2/2008229225510521.jpg" onload="javascript:resizepic(this)" border="0" hspace="0" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; (4) 完成以上步骤后，单击OK按钮，这将调出一个&#8220;Win 32 Application Wizard&#8221;对话框。</p>
<p align="center"><img onmousewheel="return bbimg(this)" alt="" src="http://www.ugcn.cn/upload/article/UploadPic/2008-2/2008229225511470.jpg" onload="javascript:resizepic(this)" border="0" hspace="0" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; (5) 在对话框中选择&#8220;Application Settings&#8221;设置项，选择&#8220;DLL&#8221;作为应用程序类型。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (6) 点击&#8220;Finish&#8221;完成工程的创建。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第二步：编译器设置</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1) 通过在&#8220;View&#8221;-&gt;&#8220;Solution Explorer&#8221;打开&#8220;解决方案资源管理器&#8221;。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2) 在&#8220;解决方案资源管理器&#8221;中右键点开&#8220;Step01&#8221;的属性窗口。</p>
<p align="center"><img onmousewheel="return bbimg(this)" alt="" src="http://www.ugcn.cn/upload/article/UploadPic/2008-2/2008229225511489.jpg" onload="javascript:resizepic(this)" border="0" hspace="0" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3) 在&#8220;Configuration:&#8221;下来菜单中选择&#8220;All Configurations&#8221;，这能保证对所有配置都进行更改。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(4) 选择&#8220;C/C++&#8221;下的&#8220;General&#8221;,把&#8220;Warning Level&#8221;调为&#8220;Level 1&#8221;，&#8220;Detect 64-Bit
Portability Issues&#8221;调为&#8220;NO&#8221;，这样做可以尽可能减少程序调试时跳出来的警告窗口影响工作，做完之后点击&#8220;Apply&#8221;。</p>
<p align="center"><img onmousewheel="return bbimg(this)" alt="" src="http://www.ugcn.cn/upload/article/UploadPic/2008-2/2008229225511346.jpg" onload="javascript:resizepic(this)" border="0" hspace="0" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (5) 选择&#8220;C/C++&#8221;下的&#8220;Code Generation&#8221;，通过下拉菜单把&#8220;Runtime Library&#8221;的值改为&#8220;Multi-threaded DLL (/MD)&#8221;，做完之后点击&#8220;Apply&#8221;。</p>
<p align="center"><img onmousewheel="return bbimg(this)" alt="" src="http://www.ugcn.cn/upload/article/UploadPic/2008-2/2008229225512167.jpg" onload="javascript:resizepic(this)" border="0" hspace="0" /><br />
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (6) 选择&#8220;C/C++&#8221;下的&#8220;General&#8221;,在&#8220;Additional Include Directories&#8221;中添加你的ObjectARX软件包的存放路径，做完之后点击&#8220;Apply&#8221;。</p>
<p align="center"><img onmousewheel="return bbimg(this)" alt="" src="http://www.ugcn.cn/upload/article/UploadPic/2008-2/2008229225512971.jpg" onload="javascript:resizepic(this)" border="0" hspace="0" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第三步：链接设置</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(1) 点开&#8220;Linker&#8221;下的&#8220;Input&#8221;，在&#8220;Additional Dependencies&#8221;中加入&#8220;rxapi.lib
acdb16.lib acge16.lib acad.lib acedapi.lib&#8221;这几个库文件，做完之后点击&#8220;Apply&#8221;。</p>
<p align="center"><img onmousewheel="return bbimg(this)" alt="" src="http://www.ugcn.cn/upload/article/UploadPic/2008-2/2008229225512303.jpg" onload="javascript:resizepic(this)" border="0" hspace="0" /><br />
<br />
<img onmousewheel="return bbimg(this)" alt="" src="http://www.ugcn.cn/upload/article/UploadPic/2008-2/2008229225513152.jpg" onload="javascript:resizepic(this)" border="0" hspace="0" /><br />
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2) 点开&#8220;Linker&#8221;下的&#8220;General&#8221;，在&#8220;Additional Library Directories&#8221;中添加ObjectARX软件包的库文件路径，做完之后点击&#8220;Apply&#8221;。</p>
<p align="center"><img onmousewheel="return bbimg(this)" alt="" src="http://www.ugcn.cn/upload/article/UploadPic/2008-2/2008229225513931.jpg" onload="javascript:resizepic(this)" border="0" hspace="0" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3) 在&#8220;Output File&#8221;中把输出文件的扩展名&#8220;.dll&#8221;改为&#8220;.arx&#8221;，点击&#8220;ok&#8221;完成工程配置的设定。</p>
<p align="center"><img onmousewheel="return bbimg(this)" alt="" src="http://www.ugcn.cn/upload/article/UploadPic/2008-2/2008229225514889.jpg" onload="javascript:resizepic(this)" border="0" hspace="0" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第四步：在工程中添加代码</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1) 在.NET环境下点开&#8220;Projec&#8221;下拉菜单，选择&#8220;Add New Item&#8221;。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2) 在&#8220;Add New Item&#8221;对话框里选择&#8220;C++ File (.cpp)&#8221;文件。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3) 输入文件名称&#8220;HelloWorld&#8221;，点&#8220;Open&#8221;打开文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (4) 在&#8220;HelloWorld.cpp&#8221;中添加以下代码：</p>
</font>
<div class="cnblogs_code"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">添加ObjectARX头文件</span><span style="color: rgb(0, 128, 0);"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">stdafx.h</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">aced.h</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">rxregsvc.h</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">声明两个函数：initApp()和unloadApp()一个作为AutoCAD调用时的初始化函数，另一个作为卸载函数</span><span style="color: rgb(0, 128, 0);"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;initApp();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;unloadApp();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">声明执行函数helloWorld()，用来在AutoCAD的命令行中打印&#8220;hello,world!&#8221;</span><span style="color: rgb(0, 128, 0);"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;helloWorld();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;初始化函数,在acrxEntryPoint()函数的kInitAppMsg事件中被调用，<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">向AutoCAD命令堆栈中添加新命令组以及ACRX类层次中添加新的自定义类，<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;本实例中无自定义类，故不用初始化新类。<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">addCommand函数在AutoCAD命令堆栈中注册新的命令组名&#8220;HELLOWORLD_COMMANDS&#8221;、<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">通用命令名&#8220;Hello&#8221;、本地命令名&#8220;你好&#8221;和该命令的执行函数helloWorld</span><span style="color: rgb(0, 128, 0);"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: rgb(0, 0, 0);"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;initApp()<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img id="Codehighlighter1_581_723_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_581_723_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_581_723_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_581_723_Closed_Text').style.display='inline';" alt="" align="top" /><img id="Codehighlighter1_581_723_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_581_723_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_581_723_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_581_723_Open_Text').style.display='inline';" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_581_723_Closed_Text" style="border: 1px solid rgb(128, 128, 128); background-color: rgb(255, 255, 255); display: none;"><img src="http://www.cnblogs.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_581_723_Open_Text"><span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" alt="" align="top" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acedRegCmds</span><span style="color: rgb(0, 0, 0);">-&gt;</span><span style="color: rgb(0, 0, 0);">addCommand(</span><span style="color: r