[c#] DLL中的内容是什么,它是如何工作的?



Answers

.dll文件包含可在您的应用程序中使用的编译代码。

有时候,用于编译.dll的工具很重要,有时候并不重要。 如果您可以在项目中引用.dll,则使用哪种工具编写.dll的公开函数并不重要。

链接发生在运行时,不像静态链接库,比如你的类,它们在编译时链接。

您可以将.dll想象成一个黑盒子,它提供了您不想自己编写的应用程序所需的一些东西。 是的,某人了解.dll的签名可能会在其中创建另一个具有不同代码的.dll文件,而您的调用应用程序无法知道其中的差异。

HTH

Question

我总是在我的C#代码中引用DLL,但他们仍然有点神秘,我想澄清。 这是关于DLL的问题的一个大脑转储。

我知道一个DLL是一个动态链接库,这意味着另一个程序可以在运行时访问这个库来获得“功能”。 但是,请考虑以下带有Web.dllBusiness.dll ASP.NET项目( Web.dll是前端功能,它引用了Business.dll的类型和方法)。

  1. Web.dll在什么时候动态链接到Business.dll ? 在使用Word(等)时,你会注意到Windows HDD的抖动很大,看起来很小的任务,我认为Word会关闭并动态地链接到其他DLL的功能中?

    1A。 此外,什么加载和链接的DLL - 操作系统或一些运行时框架,如.NET框架?

    1B。 什么是“连接”的过程? 是否进行兼容性检查? 加载到相同的内存? 连接实际上意味着什么?

  2. 什么实际上执行DLL中的代码? 它是由处理器执行还是在处理器理解DLL内部的代码之前有翻译或编译的另一个阶段?

    2A。 在使用C#.NET构建DLL的情况下,什么是直接运行.NET框架或操作系统?

  3. Linux中的DLL是否可以在Windows系统上运行(如果存在这种情况),还是它们是操作系统特定的?

  4. DLL是特定于特定框架的吗? 使用C#.NET构建的DLL可以由使用Borland C ++构建的DLL使用吗?

    4A。 如果4的答案是“否”,那么DLL的重点是什么? 为什么不用各种框架为链接文件使用自己的格式? 例如:.NET中内置的.exe文件知道.abc文件类型可以链接到它的代码中。

  5. 返回到Web.dll / Business.dll示例 - 要获取类客户的类型,我需要从Web.dll引用Business.dll 。 这意味着Business.dll包含某种规格的客户类实际是什么。 如果我已经在Delphi中编译了我的Business.dll文件:C#会理解它并能够创建一个客户类,或者是否存在某种标题信息或某种表示“嗨,对不起,您只能使用我德尔福DLL“?

    5A。 同样适用于方法; 我可以在DLL中编写一个CreateInvoice()方法,用C ++编译它,然后从C#中访问并运行它? 什么阻止或允许我这样做?

  6. 关于DLL劫持的问题,当然替换(坏)DLL必须包含被劫持的DLL的确切方法签名和类型。 如果你能找出原始DLL中有哪些方法可用,我想这不会很难做到。

    6A。 我的C#程序中的什么决定我是否可以访问另一个DLL? 如果我的劫持DLL包含与原始方法和类型完全相同的方法和类型,但是它是用另一种语言编译的,它会起作用吗?

什么是DLL导入和DLL注册?






Links



Tags

c# c#   .net .net   dll