WEB开发网
开发学院软件开发C语言 CLRviaCSharp读书随笔-第一章 1.3 阅读

CLRviaCSharp读书随笔-第一章 1.3

 2009-05-15 08:28:19 来源:WEB开发网   
核心提示:1.3 加载公共语言运行库 VS中类库项目可以单独运行吗? “我们构建的每个程序集可以是一个可执行应用程序,也可以是一个DLL”,CLRviaCSharp读书随笔-第一章 1.3, 我记得以前写类库的时候,用VS2005新建一个ClassLibrary,比如说写一个字符串处理的辅助类Str

1.3 加载公共语言运行库

   VS中类库项目可以单独运行吗?

   “我们构建的每个程序集可以是一个可执行应用程序,也可以是一个DLL”。

   我记得以前写类库的时候,用VS2005新建一个ClassLibrary,比如说写一个字符串处理的辅助类StringHelper。写好以后要调试的时候就犯愁了,类库是不能单独运行的呀,所以我又增加一个控制台程序,然后引用这个类库来进行调试。

实际上,类库和EXE的唯一区别是有没有Main函数。我们新建一个ClassLibrary,然后在Class1中增加main函数,它其实就变成了一个应用程序。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4
 5 namespace ClassLibrary1
 6 {
 7     public class Class1
 8     {
 9         public static void Main(string[] args)
10         {
11         }
12     }
13 }

然后F5开始运行,出现一个错误提示:

CLRviaCSharp读书随笔-第一章 1.3

图片看不清楚?请点击这里查看原图(大图)。

   这个错误并不是程序的错,而是编译的错,既然 “我们构建的每个程序集可以是一个可执行应用程序,也可以是一个DLL”,就应该要告诉编译器,我们是要把这个项目编译成dll还是exe,因此在项目属性->application->Output type中选成Console Application就行了。

   我刚刚知道能这么用的时候觉得异常惊讶,原来VS里那么多项目类型都是蒙人的,我原来以为完全不同的东西(windows应用程序,控制台应用程序和类库)原来差别如此之小。看来可视化编程的方式有时确实会起到误导的作用。实际上EXE和DLL文件都是PE格式。

   我们可以使用VS自带的调试工具,Modules窗口查看一下这个程序的进程中的模块。

CLRviaCSharp读书随笔-第一章 1.3

   我们看到里面有两个EXE模块。我们在任务管理器中查看进程的时候,一个进程好像总对应一个EXE文件。但是为什么这里有两个呢?

   一个进程就像一列火车,只有EXE能做火车头。

   一个进程中包含很多模块,这非常象一列火车,EXE是火车头,DLL是车厢。只有火车头才能带动火车开动,但是,一列火车可以有多个火车头吗,当然可以。在这个例子当中,火车头其实是ClassLibrary1.vshost.exe,而ClassLibrary1.exe虽然是个火车头,在这里充当了第一节车厢。

   PE文件格式就像一本书 

   一个项目总是包含很多源代码文件,包括资源文件等等,编译程序只是把多个源代码文件编译成了一个程序集文件,也可以说PE格式文件。这有点像把几十篇散文编成一本散文集。实际上,PE格式虽然非常复杂,但是粗略的看起来,PE文件格式非常像书的结构。大致分为三部分,封面前言,目录,内容。

CLRviaCSharp读书随笔-第一章 1.3

   知道这些有啥用? 

   PE文件格式当然是编译器开发人员,加密解密的基本知识,但是对应用程序开发者有什么用处?

   托管程序集也好,win32函数库也好,com也好,都是PE文件格式。我想知道这一点的好处是,我们至少知道,在技术日新月异的背后,总是有些不变的东西,而掌握这些不变的东西,以不变应万变,也许能减少一点对学习新技术的心理压力吧。

   详细的PE文件格式文档可到看雪论坛http://bbs.pediy.com/showthread.php?threadid=21932

Tags:CLRviaCSharp 读书 随笔

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接