DLL中包含什么?它如何工作?
我总是在我的C#代码中引用DLL,但我想澄清它们仍然是个谜。这是有关DLL问题的一种脑力激荡。 我知道DLL是一个动态链接的库,这意味着另一个程序可以在运行时访问该库以获取“功能”。但是,请考虑以下带有Web.dll和的ASP.NET项目Business.dll(Web.dll是前端功能,它引用Business.dll类型和方法)。 在什么时候Web.dll动态链接到Business.dll?您注意到在Windows HDD中使用Word(等)时看似很小的任务经常会发生混乱,而我认为Word正在关闭并动态链接其他DLL的功能吗? 1a。另外,什么加载和链接DLL-OS或某些运行时框架(如.NET框架)? 1b。“链接”的过程是什么?是否进行兼容性检查?加载到同一内存中?链接实际上是什么意思? 什么实际执行DLL中的代码?它是否由处理器执行,或者在处理器理解DLL中的代码之前还有其他翻译或编译阶段? 2a。对于使用C#.NET内置的DLL,正在运行什么:.NET框架或直接操作系统? Linux中的DLL是否可以在Windows系统上运行(如果存在),或者它们特定于操作系统? DLL是否特定于特定框架?使用C#.NET构建的DLL是否可以被使用Borland C ++构建的DLL使用? 4a。如果对4的回答为“否”,那么DLL的意义是什么?为什么各种框架不使用自己的链接文件格式?例如:.NET内置的.exe知道.abc文件类型可以链接到其代码中。 让我们再回到Web.dll/Business.dll例子-让客户的类类型,我需要参考Business.dll的Web.dll。这必须意味着Business.dll包含某种有关客户类别实际的规范。如果我编译了我的Business.dll文件Delphi,例如:C#会理解它并能够创建客户类,或者是否存在某种标头信息或显示“嘿,抱歉,您只能从另一个Delphi DLL使用我” ? 5a。方法同样适用;如何CreateInvoice()在DLL中编写方法,在C ++中进行编译,然后从C#访问并运行它?是什么阻止或允许我这样做? 关于DLL劫持,替换的(坏的)DLL当然必须包含与被劫持的DLL完全相同的方法签名和类型。我想,如果您能找到原始DLL中可用的方法,这将不难。 6a。我的C#程序在决定是否可以访问另一个DLL?如果我被劫持的DLL包含与原始DLL完全相同的方法和类型,但它是用另一种语言编译的,那么它将起作用吗? 什么是DLL导入和DLL注册?