典型的Windows和.NET二进制文件之间的区别

时间:2011-07-18 04:55:19

标签: c# .net winapi

典型的Windows(WIn32?COM?不确定它们叫什么。)DLL和使用.NET编译的DLL有什么区别?

我知道他们是不同的,但我不清楚细节的内部运作。

我很想知道确切的区别是什么。

编辑:尝试在此处添加更多疑问:

为什么我不能添加对Win32 DLL的引用,就像我会添加.NET DLL的引用一样?另外,为什么我们要做一个PInvoke?我们如何对.NET DLL进行反射和智能感知,但对于Win32 dll却没有类似的东西?

1 个答案:

答案 0 :(得分:2)

你的问题太宽泛而无法完全回答,所以我只关注你的第一个疑问。

.NET二进制文件 是“典型的”Windows二进制文件。

.NET PE就像其他人一样是PE。它有一个MZ头,一个DOS段,一个PE头,一个部分表和部分:.text.reloc.rsrc。到目前为止,一切都很正常。 “典型”Windows二进制文件包含所有这些内容,只有部分不同,具体取决于编译器和语言。

.text表包含一个导入表,用于导入一个DLL mscoree.dll和一个函数_CorExeMain。它还包含.NET部分:有关程序如何工作的数据(类,方法等),元数据和IL。

那么当您启动.NET二进制文件时会发生什么?没什么好看的。它只是像“典型的”Windows二进制文件一样工作。它要求mscoree.dll创建一个.NET运行时,它将加载可执行文件的.NET部分。该运行时知道如何执行IL。