加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:18:33 所属栏目:百科 来源:网络整理
导读:典型的 Windows(WIn32?COM?不确定它们叫什么.)DLL和使用.NET编译的DLL有什么区别? 我知道他们不同,但我不清楚细节的内部运作. 我很想知道确切的区别是什么. 编辑:试图在这里添加更多的疑虑: 为什么我不能添加对Win32 DLL的引用,就像我要添加.NET DLL的
典型的 Windows(WIn32?COM?不确定它们叫什么.)DLL和使用.NET编译的DLL有什么区别?

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

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

编辑:试图在这里添加更多的疑虑:

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

解决方法

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

.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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读