【发布时间】:2011-01-16 14:13:40
【问题描述】:
我想知道 .NET dll 和普通 dll 之间的确切区别是什么。
第一个问题,什么是“普通 DLL”?我用的是“正常”这个词。但是好像不太对?
因为两者都遵循 PE 格式。是的,我同意 .NET DLL 有一个额外的部分。除此之外,其他一切都一样。
我也知道在.NET 中代码被转换为CIL/MSIL 那么PE 文件的.text 部分填充了什么? MSIL?因为没有二进制代码。但是如果他们把 MSIL 放在 .text 部分。 Loader 假定它是一个二进制代码并允许它执行。事实并非如此。我错过了什么?
我很惊讶地知道
即使是 DLL 文件扩展名也是 人造的。您可以使用 DLL 完全不同的扩展——对于 实例 .OCX 控件和 Control 面板小程序(.CPL 文件)是 DLL。
还有哪些扩展用于 DLL 文件?
但我可以理解使用不同扩展的原因。在 .NET DLLS 的情况下,他们为什么不做同样的事情?他们本可以使用新的扩展来将其与“普通”DLL 区分开来。他们甚至为 .NET 中的 dll 设置了不同的名称 (ASSEMBLY),但无法更改扩展名。嗯?
另一个完全不同的问题:什么是 DLL 注册?他们为此使用 regsvr32.exe。正确的?我在安装 Windows XP SP3 时注意到了这一点。安装后&重新启动windows之前,我检查了启动列表,发现很多regsvr32.exe条目有很多DLL。
请随意深入了解您喜欢的深度。我正在学习链接器、加载器、二进制格式。我也熟悉PE文件格式。
【问题讨论】:
-
文件格式相同。它的PE带有一个新的部分。我对二进制和 MSIL 代码感到困惑。他们去哪里? .text 部分将包含什么内容。什么去哪里等等。
-
@Randy - 该链接甚至没有远程回答这里提出的问题。最重要的是,在这里不赞成立即将某人发送到 Google。
-
+1 来自我 - 好问题,有趣! :)
-
您没有向 regsvr32 注册 .NET dll/exe,-CLR 本身就是一个 COM 服务器 :o)
-
“您没有使用 regsvr32 注册 .NET dll/exe,- CLR 本身就是一个 COM 服务器”。这是什么意思?
标签: .net dll assemblies