MFC、. Net、CLR、COM、ATL 等概念理解

在进行 C++ 、C # 编程时,对 MFC、. Net、CLR、COM、ATL 等概念不理解,在此进行总结

什么是 MFC?

  • MFC 除了是一个类库以外,还是一个框架,它封装了 mfc 内核,所以你在你的代码看不到原本的 SDK 编程中的消息循环等等东西,因为 MFC 框架都封装好了

什么是.Net?

  • .NET 可以为多个平台创建应用,包括 Windows、MacOS、Linux、Android、IOS、tvOS
  • .NET 支持多处理器体系结构,包括 X64、x86、ARM32、ARM64
  • .NET 支持三种编程语言:C#、F#、Visual Basic
  • .NET 主要由两部分组成:1. 公共语言运行时 (CLR),2.Net 的框架类库 (FCL)

什么是 ASP?

  • Active Server Pages(ASP) 是一种服务器端脚本编写环境,用来创建和运行动态网页或 web 应用程序
  • asp 网页可以包含 html 标记,普通文本、脚本命令以及 COM 组件等
  • 动态网络语言有三种 ASP (VBscript 或 javascript),JSP (JavaServer Pages),PHP (Hypertext Preprocessor),ASP 采用脚本语言 VBScript(Java script)作为自己的开发语言

什么是 ASP.Net?

  • ASP .NET 的前身 ASP 技术,ASP.NET 是.NET FrameWork 的一部分,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术,它可以在通过 HTTP 请求文档时再在 Web 服务器上动态创建它们
  • asp 是解释性编程框架,而 asp.net 是编译性框架,asp.net 无论是从执行效率和安全上都远远超过 asp, 而文件上也是有差异的 asp 的后缀是.asp 而 asp.net 则是 .aspx 和.aspx.cs ,asp.net 实现了代码分离

什么是公共语言运行时 (CLR)?

  • MFC、.Net、CLR、COM、ATL等概念理解-20230704210321

  • .NET 的基础公共语言运行时 (CLR) 是 C++/CLI 的一个实例

  • CLR 也是一个虚拟机,不仅可执行应用,还可使用实时 JIT 编译器生成和编译代码,和 java 虚拟机一样,为一个运行时环境,负责内存分配和垃圾收集,并保证应用与底层操作系统之间必要的分离

  • 按照.NET 的说法,在 CLR 监视之下运行的程序属于托管代码,而不在 CLR 之下、直接在裸机上运行的应用或者组件属于非托管代码

公共语言运行时 (CLR) 在执行 C# 程序时的作用?

  • 特定于语言的编译器将源代码编译为 MSIL(Microsoft 中间语言 ),也称为 CIL(通用中间语言)IL(中间语言) 及其元数据,元数据包括所有类型,每个程序功能的实际实现。MSIL 是独立于机器的代码
  • CLR 为 MSIL 代码提供服务和运行时环境。在内部,CLR 包括 JIT(即时)编译器,它将 MSIL 代码转换为由 CPU 进一步执行的机器代码
  • CLR 还使用 .NET Framework 类库。元数据向 CLR 提供有关编程语言、环境、版本和类库的信息,CLR 通过该信息处理 MSIL 代码

什么是 COM?

  • Component Object Model(COM) 组件对象模型, 是一些小的二进制可执行程序 , 将其提取出来,作为一个代码集,为多个程序调用,将大型复杂的程序分解成多个组件方便设计与维护

什么是 ATL?

  • ATL 是 ActiveX Template Library 的缩写,它是一套 C++ 模板库。
  • 使用 ATL 能够快速地开发出高效、简洁的代码(Effective and Slim code),同时对 COM 组件的开发提供最大限度的代码自动生成以及可视化支持。ATL 就是 vs 中更方便的构造 com 组件的方式

一句话总结 MFC、Net、CLR、COM、ATL?

  • COM、MFC、ATL 和 CLR 是一种给各种语言提供运行时,类似于 jvm, 给.net 平台内的提供运行基础.
  • .net framework 是个框架内,使用 CLR 来提供运行时
  • MFC 和 ATL 比较类似,可以理解为为软开发的类库,c/c++ 中可以调用他
  • com 是一种思想或者标准,使用 MFC 和 ATL 都可以实现这种思想或者标准

C++ 中的 基于 MFC 和基于.NET 开发出来的程序有啥不同?

  • C++ 的.NET 编写的程序必选在客户端安装.NET Framework (包含 MS 公共语言运行库相当于 Java 的虚拟机,MS 提供的各种方法),而且因为有虚拟机的托管,比 MFC 多了一个步骤性能上面比 MFC 有所损失
  • 用 MFC 编写的就不需要安装任何其他的框架,直接调用操作系统的 API 就 OK

Windows 在 COM 之前已有 dll,为什么还要 COM?

  • com 是使用面向对象的方法编写的,具有封装,继承和多态,但组件不是一个对象而是可能包含多个类,而 dll 只有封装
  • dll 是针对 c 接口编写的,只能由 c 或者理解 C 调用规范的语义来使用,由编程语言来实现共享代码,而并不是用 dll 本身
  • 为了使组件更加独立,且能够支持分布式调用,便开发了 com,com 规定了组件在内存中的储存组织,使任何编程语言都可以读取这些组件中的二进制代码,使其可为所有编程语言使用,达到类似 java 语言的效果

什么是 JIT 编译器?

  • 由于 JIT 编译在应用程序的执行过程中发生,因此编译时间是运行时的一部分。 因此,JIT 编译器需要平衡优化代码所花费的时间与生成代码时可节约的时间。 但 JIT 编译器知道实际硬件,这样开发人员就无需为不同平台提供不同的实现
  • .NET JIT 编译器可以执行分层编译,这意味着它可以在运行时重新编译各个方法。 通过此功能,它可以快速编译,同时仍然能够为常用方法生成高度优化的代码版本