﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-C++ Programmer's Cookbook-随笔分类-My Project</title><link>http://www.cppblog.com/mzty/category/5778.html</link><description>&lt;a href = "http://www.cppblog.com/mzty/archive/2007/03/02/19109.html"&gt;&lt;font size = 3 &gt;{C++ 基础}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "http://www.cppblog.com/mzty/archive/2007/08/13/29922.html"&gt;&lt;font size = 3 &gt;{C++ 高级}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "http://www.cppblog.com/mzty/archive/2007/04/16/22064.html"&gt;&lt;font size = 3 &gt;{C#界面，C++核心算法}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "http://www.cppblog.com/mzty/archive/2007/03/04/19163.html"&gt;&lt;font size = 3 &gt;{设计模式}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "
http://www.cppblog.com/mzty/archive/2007/03/04/19167.html"&gt;&lt;font size = 3 &gt;{C#基础}&lt;font/&gt;&lt;/a&gt;





</description><language>zh-cn</language><lastBuildDate>Fri, 20 Feb 2009 10:03:59 GMT</lastBuildDate><pubDate>Fri, 20 Feb 2009 10:03:59 GMT</pubDate><ttl>60</ttl><item><title>《Windwos via C++》之精华</title><link>http://www.cppblog.com/mzty/archive/2008/07/13/56001.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Sun, 13 Jul 2008 02:37:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2008/07/13/56001.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/56001.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2008/07/13/56001.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/56001.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/56001.html</trackback:ping><description><![CDATA[<p>&nbsp; 来自：梦在天涯C++博客(<a href="http://www.cppblog.com/mzty/">http://www.cppblog.com/mzty/</a>)</p>
<p><span>一</span><span> </span><span>引言</span></p>
<p><span>作为一名</span><span>windows</span><span>系统上图形软件开发者已经有</span><span>3</span><span>个多年头了，在此过程中有不少的经历和经验，非常高兴与大家分享，今天主要是《</span><span>windows via C++</span><span>》一书的阅读心得，所以主要谈到的是</span><span>windows</span><span>上</span><span>C++</span><span>的开发。</span></p>
<p>&nbsp;</p>
<p><span>二</span><span> C++</span><span>语言</span></p>
<p><span>我们知道</span><span>C++</span><span>是一门</span><span>ISO</span><span>的面向对象的语言，下面我介绍他的三个方面，也正是这三个主要方面决定了他被广泛的使用。第一，</span><span>C++</span><span>是一个功能强大的语言。比如</span><span>C++</span><span>语言本身提供的基于</span><span>C</span><span>语言的内嵌类型，数组，结构体和指针等，</span><span>C++</span><span>比</span><span>C</span><span>新加入的面向对象的</span><span>Class</span><span>，继承，多态和模板等，还有</span><span>C++</span><span>标准模板库（</span><span>STL</span><span>）提供的实际开发当中常用的数据结构和算法的实现；第二，大量的开源和第三方库，如果在</span><span>windows</span><span>上使用</span><span>C++</span><span>开发，我们还可以借助</span><span>microsoft</span><span>对</span><span>C++</span><span>提供的强有力的支持，首先的</span><span>VS</span><span>编译器，还有</span><span>UI</span><span>库</span><span>MFC</span><span>，还有</span><span>ATL</span><span>等；除此之外我们还可以看到其他的许多非</span><span>microsoft</span><span>的开源的和第三方的支持，比如说</span><span>Boost</span><span>很大程度的扩充了</span><span>STL</span><span>，提供了更多更高级的功能，还有</span><span>Loki</span><span>把</span><span>C++</span><span>与设计模式结合起来，还有很多的第三方的</span><span>UI</span><span>库，比如</span><span>QT</span><span>，</span><span>WxWindows</span><span>，</span><span>WTL</span><span>，</span><span>GTK</span><span>等，第三方的网络通信库，比如</span><span>ACE</span><span>，</span><span>StreamModule</span><span>等，第三那的</span><span>XML</span><span>库，比如</span><span>Xerces</span><span>，</span><span>CMarkup</span><span>，</span><span>tinyxml</span><span>等，第三方的科学计算库，比如</span><span>Blitz++</span><span>，</span><span>MTL</span><span>等，第三方的游戏开发库，比如</span><span>OGRE</span><span>，</span><span>KlayGE</span><span>等，第三方的线程库，比如</span><span>C++ Threads</span><span>，</span><span>ZThreads</span><span>等，还有其他的很多。第三，</span><span>C++</span><span>的高性能。这个也是毋庸质疑的，我们知道的大部分的操作系统，嵌入式开发，游戏，图像软件离不开</span><span>C++</span><span>，这都是跟</span><span>C++</span><span>的高性能有很大的关系。但从这一点来看，这就是很多现代的其他的高级语言没有的，所以</span><span>C++</span><span>以后仍然有很长的路要走。</span></p>
<p>&nbsp;</p>
<p><span>三</span><span> </span><span>《</span><span>Windows via c++</span><span>》之经典</span></p>
<p><span>上面说了</span><span>C++</span><span>语言本身，这里具体到</span><span>windows</span><span>系统上</span><span>C++</span><span>的开发，我们要基于</span><span>windows</span><span>系统开发软件，就难免的要和</span><span>windows</span><span>系统打交道，比如系统本身对字符编码的支持，系统的异常处理机制，线程的创建管理，进程的创建管理，内存和虚拟内存的使用，堆栈的操作，</span><span>DLL</span><span>的使用等。上面提到的这些都不是</span><span>C++</span><span>语言本身的职责，是需要操作系统提供的支持，而所有这些内容正是《</span><span>windows via C++</span><span>》所覆盖的内容，也正是本书很好的把</span><span>C++</span><span>和</span><span>Windows</span><span>连接起来，引领</span><span>C++</span><span>程序员走向</span><span>windows</span><span>的底层，这也正是本书的经典之处</span><span>!</span><span>再次感谢作者</span><span>Jeffrey Richter</span><span>的伟大贡献！</span></p>
<p>&nbsp;</p>
<p><span>1</span><span>）字符编码：字符编码作为字符串的基础，自然而然就成了我们软件开发必不可缺少的基石，那么什么是字符编码那？字符编码就是字符在计算机内部的表示形式，我们都知道在计算机内部，所有的信息最终都表示为一个二进制的字符串。每一个二进制位（</span><span>bit</span><span>）有</span><span>0</span><span>和</span><span>1</span><span>两种状态，因此八个二进制位就可以组合出</span><span>256</span><span>种状态，这被称为一个字节（</span><span>byte</span><span>）。上个世纪</span><span>60</span><span>年代，美国制定了一套字符编码，对英语字符与二进制位之间的关系，做了统一规定。这被称为</span><span>ASCII</span><span>码，一直沿用至今。</span><span>ASCII</span><span>码一共规定了</span><span>128</span><span>个字符的编码，因为他只占用了一个字节的后面</span><span>7</span><span>位，最前面的</span><span>1</span><span>位统一规定为</span><span>0</span><span>。英语用</span><span>128</span><span>个符号编码就够了，但是用来表示其他语言，</span><span>128</span><span>个符号是不够的。所以后来就各国有了各国的编码，比如日文中的汉字远远大于</span><span>256</span><span>个，所以日文使用如果第一个字符在</span><span>0 x 8 1 </span><span>与</span><span>0 x 9 F </span><span>之间，或者在</span><span>0 x E 0 </span><span>与</span><span>0 x F C </span><span>之间，那么就必须观察下一个字节，才能确定字符串中的这个完整的字符。这样他就使用一个或两个字节来表示一个字符，这种编码被称为双字节字符集（</span><span>D B C S </span><span>）。由于世界上存在着多种编码方式，这使得同一个二进制数字可以被解释成不同的符号。因此，要想打开一个文本文件，就必须知道它的编码方式，否则用错误的编码方式解读，就会出现乱码。这个时候</span><span>Unicode</span><span>就出现了他将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码，那么乱码问题就会消失。但是</span><span>unicode</span><span>也有不同的实现，主要的有三种：</span><span>UTF-16</span><span>：其本身就是标准的</span><span>Unicode</span><span>编码方案，又称为</span><span>UCS-2</span><span>，它固定使用</span><span>16 bits(</span><span>两个字节</span><span>)</span><span>整数来表示一个字符。</span><span>UTF-32</span><span>：又称为</span><span>UCS-4</span><span>，它固定使用</span><span>32 bits(</span><span>四个字节</span><span>)</span><span>整数来表示一个字符。</span><span>UTF -8</span><span>：最广泛的使用的</span><span>UTF</span><span>方案，</span><span>UTF-8</span><span>使用可变长度字节来储存</span><span>Unicode</span><span>字符，例如</span><span>ASCII</span><span>字母继续使用</span><span>1</span><span>字节储存，重音文字、希腊字母或西里尔字母等使用</span><span>2</span><span>字节来储存，而常用的汉字就要使用</span><span>3</span><span>字节。辅助平面字符则使用</span><span>4</span><span>字节。</span><span>UTF-8</span><span>更便于在使用</span><span>Unicode</span><span>的系统与现存的单字节的系统进行数据传输和交换。与前两个方案不同：</span><span>UTF-8</span><span>以字节为编码单元，没有字节序的问题。但是不管是哪种</span><span>unicode</span><span>的实现都可以包含世界所有的字符，解决软件本地化的难题。</span></p>
<p>&nbsp;</p>
<p><span>Windows</span><span>在</span><span>2000</span><span>以前使用</span><span>ASCII</span><span>，</span><span>2000</span><span>及以后的系统都使用</span><span>unicode</span><span>来编码，但是需要注意的是</span><span>Windows2000</span><span>既支持</span><span>Unicode</span><span>，也支持</span><span>ANSI</span><span>，因此可以为任意一种开发应用程序</span><span>.</span><span>如果调用任何一个</span><span>Windows</span><span>函数并给它传递一个</span><span>ANSI</span><span>字符串，那么系统首先要将字符串转换成</span><span>Unicode</span><span>，然后将</span><span>Unicode</span><span>字符串传递给操作系统。如果希望函数返回</span><span>ANSI</span><span>字符串，系统就会首先将</span><span>Unicode</span><span>字符串转换成</span><span>ANSI</span><span>字符串，然后将结果返回给你的应用程序。所有这些转换操作都是在你看不见的情况下发生的。当然，进行这些字符串的转换需要占用系统的时间和内存。比如同一个函数</span><span>CreateWindowEx()</span><span>，在内部其实是当</span><span>ASCII</span><span>是调用</span><span>CreateWindowExA()</span><span>，而当</span><span>unicode</span><span>时调用</span><span>CreateWindowExW()</span><span>。同时</span><span>windows</span><span>系统还给我们提供了</span><span>ASCII</span><span>和</span><span>unicode</span><span>间的转化函数</span><span>MultiByteToWideChar(</span><span>）和</span><span>WideCharToMultiByte()</span><span>。</span></p>
<p>&nbsp;</p>
<p><span>2</span><span>）进程和线程：进程通常被定义为一个正在运行的程序的实例，它由两个部分组成，第一，</span><span> </span><span>一个是操作系统用来管理进程的内核对象，内核对象也是系统用来存放关于进程的统计信息的地方；第二，是地址空间，它包含所有可执行模块或</span><span> D L L </span><span>模块的代码和数据，它还包含动态内存分配的空间，如线程堆栈和堆分配空间。线程是应用程序执行时的最小单位，同样线程也是由两个部分组成的：第一，</span><span> </span><span>一个是线程的内核对象，操作系统用它来对线程实施管理，内核对象也是系统用来存放线程统计信息的地方；第二，线程堆栈，它用于维护线程在执行代码时需要的所有函数参数和局部变量。</span></p>
<p>&nbsp;</p>
<p><span>进程是不活泼的，从来不执行任何东西，它只是线程的容器，若要使进程完成某项操作，它必须拥有一个在它的环境中运行的线程，该线程负责执行包含在进程的地址空间中的代码，当创建一个进程时，系统会自动创建它的第一个线程，称为主线程，然后，该线程可以创建其他的线程，而这些线程又能创建更多的线程。如果在单进程环境中，你有两个或多个线程正在运行，那么这两个线程将共享单个地址空间。这些线程能够执行相同的代码，对相同的数据进行操作。这些线程还能共享内核对象句柄，因为句柄表依赖于每个进程而不是每个线程存在。</span></p>
<p><span>windows</span><span>提供和很多函数来创建和管理线程和进程，比如</span><span>CreateThread</span><span>（），</span><span>ExitThread</span><span>（），</span><span>TerminateThread</span><span>（），</span><span>GetCurrentThread()</span><span>，</span><span>CreateProcess</span><span>（），</span><span>ExitProcess</span><span>（），</span><span>TerminateProcess </span><span>（），</span><span>GetCurrentProcess</span><span>（）等。</span></p>
<p>&nbsp;</p>
<p><span>3</span><span>）线程同步和线程局部存储：由于同一进程的所有线程共享进程的虚拟地址空间，并且线程的中断是汇编语言级的，所以可能会发生两个线程同时访问同一个对象（包括全局变量、共享资源、</span><span>API</span><span>函数和</span><span>MFC</span><span>对象等）的情况，这有可能导致程序错误。属于不同进程的线程在同时访问同一内存区域或共享资源时，也会存在同样的问题。因此，在多线程应用程序中，常常需要采取一些措施来同步线程的执行。</span></p>
<p>&nbsp;</p>
<p><span>windows</span><span>提供了</span><span>3</span><span>中同步机制，分别是信号量</span><span>Semaphore</span><span>，互斥量</span><span>Mutex</span><span>，关键代码段</span><span>CriticalSection</span><span>。其中信号量</span><span>Semaphore</span><span>，是一个可以限制对指定的临界段进行访问的线程的数目的数据结构。互斥量</span><span>Mutex</span><span>和关键代码段</span><span>CriticalSection</span><span>，他们的作用是相同的，都是用来保证某时刻只有一个线程能够访问全局或静态的资源。区别是：</span><span>Mutex</span><span>是内核对象，可以设置等待超时时间，可以在不同的进程的线程中使用，但是所消耗的时间也比较多。</span><span>CriticalSection</span><span>与</span><span>Mutex</span><span>相反。</span></p>
<p>&nbsp;</p>
<p><span>线程局部存储（</span><span>TLS</span><span>），可以为全局或静态变量对不同的线程有不同的拷贝。</span></p>
<p>&nbsp;</p>
<p><span>4</span><span>）线程池：可以实现在程序中根据需要动态的创建线程，比如在</span><span>server</span><span>端，根据访问的用户的多少来创建线程的多少。在</span><span>windows2000</span><span>以后增加了创建线程池的</span><span>API</span><span>，比如</span><span> QueueUserWorkItem</span><span>（）。</span></p>
<p>&nbsp;</p>
<p><span>5)&nbsp;</span><span>纤程：用户级的线程机制，比线程小的单位，开发人员负责管理纤程的调度，同时负责确定纤程何时在线程时间片上下文中运行，一般不会带来性能的提高，主要的目的是为开发人员调度多个不需要并行执行的任务提供一个便捷的机制。单线程可以包含一个或多个纤程。就内核而言，线程是抢占调度的，是正在执行的代码。然而，线程每次执行一个纤程的代码，你决定究竟执行哪个纤程，你可以调用</span><span>ConvertThreadToFiber</span><span>（）</span><span>将已有的线程转化位纤程，当对纤程的执行环境进行分配和初始化后，就可以将执行环境的地址与线程关联起来，该线程被转换成一个纤程，而纤程则在该线程上运行。现在，如果你的纤程（线程）返回或调用</span><span>ExitThread</span><span>函数，那么纤程和线程都会终止运行。除非打算创建更多的纤程以便在同一个线程上运行，否则没有理由将线程转换成纤程。若要创建另一个纤程，该线程（当前正在运行纤程的线程）可以调用</span><span>CreateFiber</span><span>函数。但是调用</span><span>CreateFilber</span><span>创建的纤程并不执行，直到调用</span><span>SwitchToFiber</span><span>函数。若要撤消纤程，可以调用</span><span>DeleteFiber</span><span>函数。</span></p>
<p>&nbsp;</p>
<p><span>6)&nbsp;</span><span>作业：作业可以看作是一组进程的容器</span><span>,</span><span>把这些进程当作一个整体</span><span>,</span><span>对这个整体整个加入更多的限制</span><span>. </span><span>因为</span><span>Windows</span><span>并不维护进程之间的父</span><span>/</span><span>子关系。即使父进程已经终止运行，子进程仍然会继续运行。</span><span>Microsoft Windoss 2000</span><span>提供了一个新的作业内核对象，使你能够将进程组合在一起，并且创建一个&#8220;沙框&#8221;，以便限制进程能够进行的操作。最好将作业对象视为一个进程的容器。但是，创建包含单个进程的作业是有用的，因为这样一来，就可以对该进程加上通常情况下不能加的限制。创建一个新作业内核对象可以调用</span><span>CreateJobObject</span><span>（），另一个进程要访问作业，可以通过</span><span>OpenJobObject</span><span>（），应该知道，关闭作业对象并不会迫使作业中的所有进程终止运行。该作业对象实际上做上了删除标记，只有当作业中的所有进程全部终止运行之后，该作业对象才被自动撤消。注意，关闭作业的句柄后，尽管该作业仍然存在，但是该作业将无法被所有进程访问。通过调用</span><span>SetInformationJobObject()</span><span>可以给作业加上各种限制</span><span>.</span><span>查询限制</span><span>QueryInformationJobObject</span><span>（），将进程放入作业</span><span>AssignProcessToJobObject</span><span>（），若要撤销作业中的进程调用</span><span>TerminateJobObject</span><span>（）。</span></p>
<p>&nbsp;</p>
<p><span>7)&nbsp;</span><span>虚拟内存，内存映射文件和堆栈：每个进程都被赋予它自己的虚拟地址空间。对于</span><span>3 2</span><span>位进程来说，这个地址空间是</span><span>4 G B,</span><span>其中默认有</span><span>2G</span><span>是用户可以使用的。由于每个进程可以接收它自己的私有的地址空间，因此当进程中的一个线程正在运行时，该线程可以访问只属于它的进程的内存。属于所有其他进程的内存则隐藏着，并且不能被正在运行的线程访问。注意在</span><span>Windows 2000</span><span>中，属于操作系统本身的内存也是隐藏的，正在运行的线程无法访问。这意味着线程常常不能访问操作系统的数据。</span></p>
<p>&nbsp;</p>
<p><span>Windows</span><span>提供了</span><span>3</span><span>种进行内存管理的方法，它们是第一，</span><span> </span><span>虚拟内存，最适合用来管理大型对象或结构数组。</span><span> </span><span>第二，内存映射文件，最适合用来管理大型数据流（通常来自文件）以及在单个计算机上运行的多个进程之间共享数据。第三，</span><span> </span><span>内存堆栈，最适合用来管理大量的小对象。</span></p>
<p>&nbsp;</p>
<p><span>在较老的操作系统中，物理存储器被视为计算机拥有的</span><span>R A M</span><span>的容量。换句话说，如果计算机拥有</span><span>1 6 M B</span><span>的</span><span>R A M</span><span>，那么加载和运行的应用程序最多可以使用</span><span>1 6 M B</span><span>的</span><span>R A M</span><span>。今天的操作系统能够使得磁盘空间看上去就像内存一样。磁盘上的文件通常称为页文件，它包含了可供所有进程使用的虚拟内存。</span></p>
<p>&nbsp;</p>
<p><span>内存映射文件与虚拟内存一样，内存映射文件可以用来保留一个地址空间的区域，并将物理存储器提交给该区域。它们之间的差别是，物理存储器来自一个已经位于磁盘上的文件，而不是系统的页文件。一旦该文件被映射，就可以访问它，就像整个文件已经加载内存一样。</span></p>
<p>&nbsp;</p>
<p><span>堆栈可以用来分配许多较小的数据块。例如，若要对链接表和链接树进行管理，最好的方法是使用堆栈，堆栈的优点是，可以不考虑分配粒度和页面边界之类的问题，集中精力处理手头的任务。堆栈的缺点是，分配和释放内存块的速度比其他机制要慢，并且无法直接控制物理存储器的提交和回收。进程和线程都有自己的堆栈，而且大小可以更改。</span></p>
<p>&nbsp;</p>
<p><span>8)&nbsp;DLL</span><span>使用：</span><span>windows</span><span>中广泛的使用</span><span>dll</span><span>来实现模块化，</span><span>dll</span><span>的使用一般有静态和动态加载，静态加载一般通过编译器的设置来实现，动态加载通过使用</span><span>loadlibrary</span><span>（）和</span><span>freelibrary</span><span>（）来实现。</span></p>
<p>&nbsp;</p>
<p><span>9</span><span>）结构化异常处理（</span><span>SEH</span><span>）：</span><span>SEH </span><span>是</span><span> Windows </span><span>系统提供的异常处理功能，跟开发工具无关。</span><span>windows</span><span>上其他程序中的异常处理一般底层都是转化为</span><span>SEH</span><span>来实现。实际上，当你写一条</span><span>C++ throw</span><span>语句时，编译器就生成一个对</span><span>Windows</span><span>的</span><span>RaiseException</span><span>函数的调用。用于</span><span>throw</span><span>语句的变量传递给</span><span>RaiseException</span><span>作为附加的参数。</span></p>
<p>&nbsp;</p>
<p><span>四</span><span> </span><span>《</span><span>Windows via c++</span><span>》之新增</span></p>
<p>&nbsp;</p>
<p><span>1</span><span>）</span><span>64</span><span>位支持：最新的系统有</span><span>64</span><span>的版本，这样的话进程就不再有最大</span><span>4G</span><span>的内存限制，但是由于</span><span>64</span><span>位系统与以前的</span><span>32</span><span>位系统其实是一个</span><span>codebase</span><span>，所以基本有所的接口都与以前</span><span>32</span><span>位保持椅子，这样的话我们以前的所有的</span><span>32</span><span>位的程序只需要从新编译就可以运行在</span><span>64</span><span>系统上，需要特别注意的是指针和句柄的从</span><span>32</span><span>位到</span><span>64</span><span>位的转变。</span></p>
<p>&nbsp;</p>
<p><span>2</span><span>）</span><span>windows vista/2008</span><span>特有：提供了更加安全的</span><span>stirng</span><span>函数，一些内核对象的改变等。</span></p>
<p>&nbsp;</p>
<p><span>3</span><span>）可重复使用的代码：大量可在我们日常开发中重复使用的代码和让我们更好的理解进程的源代码</span><span>processInfo</span><span>，</span><span>LockCop</span><span>等。</span></p>
<p>&nbsp;</p>
<p><span>五</span><span> </span><span>总结</span></p>
<p><span>总之，通过阅读《</span><span>Windows via C++</span><span>》使我们更好的了解</span><span>windows</span><span>系统，更好的在</span><span>windows</span><span>进行</span><span>C++</span><span>开发！推荐</span><span>windows</span><span>上</span><span>C++</span><span>开发人员可以一读！</span></p><img src ="http://www.cppblog.com/mzty/aggbug/56001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2008-07-13 10:37 <a href="http://www.cppblog.com/mzty/archive/2008/07/13/56001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows开发经典图书推荐</title><link>http://www.cppblog.com/mzty/archive/2008/07/10/55775.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Thu, 10 Jul 2008 01:19:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2008/07/10/55775.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/55775.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2008/07/10/55775.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/55775.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/55775.html</trackback:ping><description><![CDATA[不能不说是经典啊！我觉的是非常的经典啊！感谢图灵！借首页一用哦！<br><br><img height=534 alt="" src="http://www.cppblog.com/images/cppblog_com/mzty/7317/o_yitiantulong.JPG" width=993 border=0><br><br>参考：<a href="http://www.cnblogs.com/turingbooks/archive/2008/07/04/1235964.html">http://www.cnblogs.com/turingbooks/archive/2008/07/04/1235964.html</a><br>更多图灵图书可以看：<a href="http://www.cnblogs.com/turingbooks/">http://www.cnblogs.com/turingbooks/</a> <br><br>购买：<a href="http://www.china-pub.com/static/zt_mb/zt_huodong_0808.asp?filename=jsj_tlms_080702">http://www.china-pub.com/static/zt_mb/zt_huodong_0808.asp?filename=jsj_tlms_080702</a><img src ="http://www.cppblog.com/mzty/aggbug/55775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2008-07-10 09:19 <a href="http://www.cppblog.com/mzty/archive/2008/07/10/55775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>盖茨53年人生大事记</title><link>http://www.cppblog.com/mzty/archive/2008/06/18/53911.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Wed, 18 Jun 2008 09:35:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2008/06/18/53911.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/53911.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2008/06/18/53911.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/53911.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/53911.html</trackback:ping><description><![CDATA[<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;《连线》杂志近日撰文称，微软创始人兼董事会主席比尔&#183;盖茨(Bill Gates)将于7月正式退出微软的日常运营，全身心投入慈善事业。盖茨的离去将令很多人依依不舍，不仅因为他白手起家的传奇经历激励着人们矢志前进，而且，在盖茨的财富背后，还隐藏着一种更为根本的东西，值得我们去探究。在盖茨与我们告别之际，让我们来回顾一下他走过的50多年的难忘瞬间。
<p>　　<strong>20世纪50年代</strong></p>
<p>　　1955年10月28日 </p>
<p>　　威廉-亨利&#183;盖茨三世出生于西雅图。祖母奥黛丽给他起了一个外号——&#8220;特利&#8221;(Trey)，Trey在英语中的意思是三点的牌、骰子或骨牌。盖茨后来也确实成了一名扑克牌高手。</p>
<p><strong>　　20世纪60年代</strong></p>
<p>　　1967年</p>
<p>　　盖茨上六年级，学习成绩不佳，他充满困惑地问妈妈，&#8220;您曾尝试思考吗？&#8221;</p>
<p>　　1967年秋 </p>
<p>　　盖茨的父母把他送进了湖边学校(Lakeside School)，这是西雅图一所男子学校。他是班里最矮的学生。</p>
<p>　　1968年</p>
<p>　　盖茨和湖边学校同班同学保罗&#183;艾伦(Paul Allen)从手册中学会了Basic语言。几周后，这两个小家伙便将学校用于支付PDP-10电脑使用时间的3000美元年度预算花得一干二净。他们俩不久即与电脑中心公司签了一份合约，向其报告PDP-10电脑中存在的软件缺陷，而报酬是免费使用电脑。</p>
<p><strong>　　20世纪70年代</strong></p>
<p>　　1971年</p>
<p>　　盖茨为湖边学校编写程序，包括一个设计班级课程表的程序。</p>
<p>　　1973年9月</p>
<p>　　盖茨考入哈佛大学。他的学习成绩很不稳定。他有很多坏习惯，经常旷课去编程、玩牌，不爱洗澡，喜欢比萨饼和碳酸饮料。他与住在同一个宿舍的史蒂夫&#183;鲍尔默(Steve Ballmer)结为好友。</p>
<p>　　1975年1月</p>
<p>　　艾伦无意中看到了《大众电子》的封面，上面是Altair 8800电脑的照片和&#8220;全球第一台对抗商业模式的微型电脑装置&#8221;的大字标题。艾伦买了一本，并冲进盖茨的房间。几天后，盖茨给Altair电脑制造商 MITS打去电话，告诉该公司他和艾伦能为8800电脑开发出Basic语言。</p>
<p>　　1975年2月1日</p>
<p>　　盖茨和艾伦完成Basic开发，将其以3000美元外加最高达18万美元的版税卖给MITS公司。</p>
<p>　　1976年11月26日</p>
<p>　　盖茨和艾伦注册了微软(Microsoft)商标。他们一度考虑以艾伦与盖茨(Allen &amp; Gates)作为公司名称，后提出Micro-Soft，但他们决定将中间的连字符去掉，于是微软就此诞生。当时艾伦23岁，盖茨21岁。</p>
<p>　　1977年1月</p>
<p>　　盖茨从哈佛大学休学，在新墨西哥州阿尔伯克基创建了微软，MITS总部也设在此地。</p>
<p>　　1977年</p>
<p>　　盖茨的秘书多次在微软办公大楼内发现盖茨躺在地板上呼呼大睡。他仍喜欢吃比萨饼，同时对属下要求严格，经常与同事争辩。盖茨经常说的一句话是：&#8220;这是我有史以来听说的最愚蠢的事情。&#8221;</p>
<p>　　1977年底</p>
<p>　　盖茨多次因驾驶保时捷911超速而被警方逮捕，还有一次则是无照驾驶。这可害苦了艾伦，他保释盖茨的经历至少有一次。</p>
<p>　　1978年12月</p>
<p>　　微软年终销售额超过100万美元。</p>
<p>　　1979年1月1日</p>
<p>　　微软将公司总部迁至华盛顿州贝尔维尤市。</p>
<p><strong>　　20世纪80年代</strong></p>
<p>　　1980年8月28日</p>
<p>　　盖茨与IBM签署合同，同意为这家PC制造商开发软件。后来，他以5万美元买了一套名为QDOS的操作系统，稍加改进并更名为DOS，便授权IBM使用。</p>
<p>　　1981年8月12日</p>
<p>　　IBM开始销售具有MS-DOS 1.0的PC。</p>
<p>　　1982年</p>
<p>　　在上市销售的第一年，MS-DOS被授权于50个硬件制造商使用。</p>
<p>　　1983年2月18日</p>
<p>　　艾伦因身患霍奇金氏病被迫辞去微软副总裁一职。他买了一个<a class=akey href="http://sports.sina.com.cn/basketball/" target=_blank><span style="COLOR: #0066cc">篮球</span></a>队，创建了一个音乐博物馆，拥有世界上第三大游艇。</p>
<p>　　1983年11月10日</p>
<p>　　Windows揭开神秘面纱。Windows是MS-DOS的延伸，可提供图形用户界面。</p>
<p>　　1984年1月24日</p>
<p>　　盖茨出席了Macintosh的上市宣传活动——微软是第一批为苹果电脑开发软件的公司之一。</p>
<p>　　1985年</p>
<p>　　有报道称盖茨粗暴辱骂一位女高管，后者要求调离岗位。</p>
<p>　　1985年8月12日</p>
<p>　　经过10年的奋斗，微软产品的销售额达到1.4亿美元。</p>
<p>　　1986年3月13日</p>
<p>　　微软以每股21美元公开发售股票。当天微软股价报收于28美元，为公司筹集到6100万美元。</p>
<p>　　1987年</p>
<p>　　盖茨在曼哈顿召开的微软新闻发布会上邂逅梅琳达&#183;弗朗奇(Melinda French)。</p>
<p>　　1989年8月1日</p>
<p>　　微软推出Office办公软件。</p>
<p><strong>　　20世纪90年代</strong></p>
<p>　　1990年5月13日</p>
<p>　　盖茨在母亲节这一天提出微软公司高层退休时间表。</p>
<p>　　1990年6月</p>
<p>　　美国联邦贸易委员会对微软和IBM在PC软件市场可能存在的勾结行为展开调查。</p>
<p>　　1993年4月11日</p>
<p>　　在从佛罗里达州飞往西雅图的包机上，盖茨向梅琳达求婚。盖茨还安排飞机在奥马哈降落，带着梅琳达同好友沃伦&#183;巴菲特(Warren Buffett)一同出去购物。</p>
<p>　　1993年8月20日</p>
<p>　　美国司法部从联邦贸易委员会接管对微软的调查。</p>
<p>　　1994年1月1日</p>
<p>　　盖茨和梅琳达在夏威夷拉奈小岛上举行了小型婚礼。为给新婚妻子一个惊喜，盖茨特意安排梅琳达最喜欢的歌手威利&#183;尼尔森(Willie Nelson)在婚礼上表演。</p>
<p>　　1994年4月</p>
<p>　　好消息：盖茨首次登上了《连线》杂志封面。坏消息：美国政府对微软展开了反垄断调查。</p>
<p>　　1994年7月</p>
<p>　　微软同意接受美国政府签署的法令，承诺放弃极端的反竞争商业行为(例如，要求硬件制造商为其所生产的配置特定微处理器的所有电脑支付MS-DOS授权费，即使该电脑没有安装这一操作系统)。</p>
<p>　　1994年11月11日</p>
<p>　　盖茨以3080万美元购得达&#183;芬奇的《哈默手稿》(Codex Hammer)——达&#183;芬奇亲笔写下的72页科学手稿。他同意将《哈默手稿》公开展示。</p>
<p>　　1995年</p>
<p>　　盖茨出现在可口可乐(据报道他喜欢喝健怡可乐)的商业广告中：这位亿万富翁搜遍全身口袋，寻找购买饮料的零钱。</p>
<p>　　1995年7月17日</p>
<p>　　39岁的盖茨以129亿美元的个人财富成为世界首富。微软在1995年的收入达到59亿美元，拥有17,801名员工。</p>
<p>　　1995年8月24日</p>
<p>　　微软推出网络浏览器Internet Explorer。</p>
<p>　　1996年6月</p>
<p>　　盖茨第二次登上《连线》杂志封面，这次是用Photoshop软件处理过的他裹着浴袍的照片。</p>
<p>　　1996年12月</p>
<p>　　微软股价创下新高——同比上涨88%。从理论上讲，那一年，盖茨每天的收入高达3000万美元。</p>
<p>　　1997年10月20日</p>
<p>　　因违反1994年签署的协议，美国法院对微软处以每天100万美元的罚款。美国司法部称，微软要求硬件制造商申请Windows 95授权时，必须在其硬件产品中绑定Internet Explorer，由此违反了这一协议。</p>
<p>　　1998年2月4日</p>
<p>　　盖茨在比利时布鲁塞尔会见比利时政府官员和企业家时，遭到奶油蛋糕的袭击。事后，盖茨开玩笑说，&#8220;这块蛋糕可不怎么好吃&#8221;。</p>
<p>　　1998年5月18日</p>
<p>　　美国司法部和20个州的总检察官认为微软将网络浏览器绑定到其操作系统，违反了相关规定，由此对微软提出起诉。</p>
<p>　　1998年11月9日</p>
<p>　　在一段作证录像中，当盖茨表示自己从未蓄意将竞争对手赶出软件市场时，他的身子微微颤抖。医生据此认为盖茨可能患有亚斯伯格症候群(Asperger's syndrome)。</p>
<p>　　1999年</p>
<p>　　盖茨和妻子将威廉&#183;盖茨基金会更名为比尔与梅琳达&#183;盖茨基金会，并提出了减少世界上不公平现象的目标。</p>
<p><strong>　　21世纪初</strong></p>
<p>　　2000年1月13日</p>
<p>　　盖茨辞去微软CEO一职，成为公司首席软件工程师，将大权交给鲍尔默。</p>
<p>　　2000年6月7日</p>
<p>　　美国联邦地区法院法官托马斯&#183;潘菲尔德&#183;杰克逊(Thomas Penfield Jackson)裁定微软应一分为二。</p>
<p>　　2000年11月</p>
<p>　　盖茨第三次登上《连线》杂志封面，这次是为了揭开微软反垄断案后鲜为人知的故事。</p>
<p>　　2001年6月28日</p>
<p>　　美国哥伦比亚地区上诉法院推翻杰克逊法官的裁决。</p>
<p>　　2002年 </p>
<p>　　据针对中国内地和香港年轻人的调查显示，盖茨取代了毛泽东在他们心中的偶像地位。</p>
<p>　　2005年3月2日</p>
<p>　　盖茨在白金汉宫接受英国女王授予的骑士勋章，此前，鲁迪&#183;朱利安尼和斯蒂文&#183;斯皮尔伯格都曾获得这一殊荣。盖茨此后有资格在名字后面加上字母&#8220;KBE&#8221;(英帝国爵级勋章)。</p>
<p>　　2005年12月</p>
<p>　　盖茨夫妇和爱尔兰U2乐队主唱波诺当选为美国《时代》周刊2005年度人物。</p>
<p>　　2006年6月15日</p>
<p>　　盖茨宣布，他将在两年内逐步退出公司的日常事务管理。</p>
<p>　　2006年6月26日</p>
<p>　　在得到巴菲特300多亿美元捐款后，比尔与梅琳达&#183;盖茨基金会规模壮大一倍，成为世界最大的慈善基金会。</p>
<p>　　2008年3月</p>
<p>　　《福布斯》发布08年全球富豪排行榜，蝉联13年首富桂冠的盖茨以580亿美元的资产总值下滑至第三的位置。而盖茨的牌友、&#8220;股神&#8221;巴菲特则取代他问鼎冠军宝座。(杨琳)</p><img src ="http://www.cppblog.com/mzty/aggbug/53911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2008-06-18 17:35 <a href="http://www.cppblog.com/mzty/archive/2008/06/18/53911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>构建可扩展的应用程序</title><link>http://www.cppblog.com/mzty/archive/2008/06/06/52381.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Fri, 06 Jun 2008 09:26:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2008/06/06/52381.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/52381.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2008/06/06/52381.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/52381.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/52381.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 14pt"><br></span><span style="FONT-FAMILY: 宋体">一 构建可扩展的应用程序<br><br>什么是可扩展的应用程序？没有标准的定义，一些实例：<br>Eclipse，Firefox，Office，Ogre, AutoCAD, pro/e, other design software...<br><br>二 可扩展应用程序开发过程<br>&nbsp;&nbsp;&nbsp;开发过程我们尽量的使我们的软件能够适应变化，能够很容易的增加或修改功能，不可避免的要使用design pattern，当有新的需求进入的时候，原有的架构不能满足要求，这时要refactoring，其实agile software 他强调的就使软件是一个不断的迭代的过程，要跟着用户的需求不对的变化，总之使我们的应用程序有好的framework，好的architecture！<br><br>三&nbsp;Plug-ins插件模式<br>1) C++ 主要技术：<br>&nbsp;&nbsp;&nbsp;LoadLibrary()/GetProcAddress()/FreeLibrary()&nbsp;<br>&nbsp;&nbsp;&nbsp;C++类图如下：<br><img src="http://www.cppblog.com/images/cppblog_com/mzty/7317/o_CppPluginManager.PNG" border=0><br>&nbsp;&nbsp;&nbsp;samples代码下载：<a href="http://www.cppblog.com/Files/mzty/Plugins.zip">http://www.cppblog.com/Files/mzty/Plugins.zip</a><br><br></span><br>2）C#主要技术：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assembly.Load() / LoadFile() / LoadFrom() （区别：LoadFile只load本dll，LoadFrom会load其他引用到的dll）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type.GetInterface() / IsInterface() / GetMethod() / GetProperty() / / &#8230;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Activator.CreateInstance (Type) / Assembly.CreateInstance(String) / Type.GetConstructor().invoke()&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C#类图如下：<br><img src="http://www.cppblog.com/images/cppblog_com/mzty/7317/o_CsharpPluginManager.PNG" border=0><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sample代码下载：<a href="http://www.cppblog.com/Files/mzty/Plugins.zip">http://www.cppblog.com/Files/mzty/Plugins.zip</a><br><br>3）CLI\C++,Managed C++主要目的：（使应用程序可以同时支持NativeC++和net的plugins）<br><img src="http://www.cppblog.com/images/cppblog_com/mzty/7317/o_CLICPP.PNG" border=0><br><br>4）总之，经过上面的三步，我们可以实现一个应用程序，可以加载C++和C#的plugins（使用CLI\C++封装），能够动态的加载（C#用Appdomain），能够控制只加载需要的dll（配置文件或C++的dll改为其他的名字）。<br><br>四&nbsp;VBA\VSTA集成环境中开发<br><br>VBA和VSTA都是microsoft提过的可以被嵌入的其他的应用程序中的开发工作，VBA是用集成VB的开发IDE，VSTA是集成基于.net的开发IDE。<br>架构如下图：<br><img src="http://www.cppblog.com/images/cppblog_com/mzty/7317/o_VSTA.PNG" border=0><br>其他：<a href="http://msdn.microsoft.com/en-us/isv/bb190538.aspx">http://msdn.microsoft.com/en-us/isv/bb190538.aspx</a>&nbsp;和 <a href="http://www.summsoft.com/">http://www.summsoft.com/</a><br><br>五&nbsp;支持脚本的集成开发<br><br>关于是应用程序支持脚本语言的集成开发，可以查看脚本语言的帮助，一般都有这方面的支持，可以看Python : <a href="http://www.python.org/">www.python.org</a>, 比如python嵌入到AutoCAD的开源项目PyACAD，<a href="http://pyacad.sourceforge.net/">http://pyacad.sourceforge.net/</a>&nbsp;。<br><br>六&nbsp;总结<br>在开发我们自己的应用程序的时候考虑，开放性，可扩展性！<img src ="http://www.cppblog.com/mzty/aggbug/52381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2008-06-06 17:26 <a href="http://www.cppblog.com/mzty/archive/2008/06/06/52381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>本博客所有精华随笔索引</title><link>http://www.cppblog.com/mzty/archive/2008/01/17/41318.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Thu, 17 Jan 2008 02:14:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2008/01/17/41318.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/41318.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2008/01/17/41318.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/41318.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/41318.html</trackback:ping><description><![CDATA[<p><br>总结：<a href="http://www.cppblog.com/mzty/archive/2007/08/13/29922.html"><br><br>http://www.cppblog.com/mzty/archive/2007/08/13/29922.html</a>&nbsp; C++高级</p>
<p><a href="http://www.cppblog.com/mzty/archive/2007/03/02/19109.html">http://www.cppblog.com/mzty/archive/2007/03/02/19109.html</a>&nbsp; C++基础</p>
<p><a href="http://www.cppblog.com/mzty/archive/2007/04/16/22064.html">http://www.cppblog.com/mzty/archive/2007/04/16/22064.html</a>&nbsp; C#界面，C++核心算法</p>
<p><a href="http://www.cppblog.com/mzty/archive/2007/03/04/19163.html">http://www.cppblog.com/mzty/archive/2007/03/04/19163.html</a>&nbsp; 设计模式</p>
<p><a href="http://www.cppblog.com/mzty/archive/2007/03/29/20893.html">http://www.cppblog.com/mzty/archive/2007/03/29/20893.html</a>&nbsp; 64bit，FW3.0随笔分类 </p>
<p><a href="http://www.cppblog.com/mzty/archive/2007/03/29/20892.html">http://www.cppblog.com/mzty/archive/2007/03/29/20892.html</a>&nbsp; windows脚本技术</p>
<p><a href="http://www.cppblog.com/mzty/archive/2007/03/04/19167.html">http://www.cppblog.com/mzty/archive/2007/03/04/19167.html</a>&nbsp; C#基础</p><img src ="http://www.cppblog.com/mzty/aggbug/41318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2008-01-17 10:14 <a href="http://www.cppblog.com/mzty/archive/2008/01/17/41318.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CppBlog备份工具开发（开源）</title><link>http://www.cppblog.com/mzty/archive/2007/12/12/38355.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Wed, 12 Dec 2007 14:17:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2007/12/12/38355.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/38355.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2007/12/12/38355.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/38355.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/38355.html</trackback:ping><description><![CDATA[<p><br>一 背景<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;长久以来一直想把自己的blog备份到本地，可是找来找去找不到非常合适的备份工具，所以只有自己动手写一个。考虑到需求主要是对html的解析，还要快速开发，所以选择C#来个简单的原型先，不过据我研究Python提供了很多这方面的功能，所以可能后来也会用Python开发一个更通用的版本。<br><br>二 需求<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1）根据用户名和BSP的域名，得到blog下所有文章的地址。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2）对所有的地址下载Html保存到本地。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3）对html中使用到的图片的保存。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4）对CSS，JS其他文件的下载。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5）分类。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6）最好可以做成CHM格式。<br><br>三 C# 版本<br><br>第一版本：<a href="http://www.cppblog.com/Files/mzty/BlogBackUpForMyCppblog2.rar">http://www.cppblog.com/Files/mzty/BlogBackUpForMyCppblog2.rar</a><br><br>四 Python版本<br></p>
欢迎大家提供相关的需求和相关的技术，使备份工具早日实现，供大家使用！有兴趣的也可以加入哦！<img src ="http://www.cppblog.com/mzty/aggbug/38355.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2007-12-12 22:17 <a href="http://www.cppblog.com/mzty/archive/2007/12/12/38355.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SDK学习方法</title><link>http://www.cppblog.com/mzty/archive/2007/11/09/36218.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Fri, 09 Nov 2007 07:42:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2007/11/09/36218.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/36218.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2007/11/09/36218.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/36218.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/36218.html</trackback:ping><description><![CDATA[<p>SDK学习方法</p>
<p>在我们平常的开发当中，不免我们要使用一些其他的第三方的组件，而且我们要快速的掌握我们需要的方面，然后应用到我们的实际项目当中。</p>
<p>下面简单的列一下我的学习步骤：</p>
<p>1下载运行时库，可能是头文件，lib或dll。</p>
<p>2下载和安装SDK，在SDK中除了我们开发使用的头文件，lib和dll外，最重要的就是文档Documentation和samples。</p>
<p>3最好是有熟悉该component的people来个training。（traing也可以来自web上的一些video资料，such as：webcast）</p>
<p>4大部分情况我们是自学，并没有人能给我们培训，如果是这样，SDK中Documentation和samples是最好的老师。首先应该从Documentation中的Get started开始，一步一步的深入，同时一般会有tutorials，所以我们可以代码结合Documentation学习。学习完tutotials，一般我们可以了解大概，然后想继续深入则看sample下我们关系的，samples一般是按功能分类的，同时可以结合Documentation下的how do i？在how do i?可以解决一些常见的问题和技巧。如果该组件同时有native和managed版本，则最好可以找到native和managed的class，method的对应列表，这样可以跟快的相互转化。</p>
<p>5除了SDK，我们还可以在web上找专家，最好是blog和论坛。</p>
<p>6当然如果有同事一起学习，相互交流，作用也很大！</p><img src ="http://www.cppblog.com/mzty/aggbug/36218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2007-11-09 15:42 <a href="http://www.cppblog.com/mzty/archive/2007/11/09/36218.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>