.net dll在c ++ dll中有一个像dll这样的入口点
我真的不确定.net dll是否也有像c ++ dll一样的入口点。 我怎么知道.net dll是否有入口点。
我在某地读到WIN32 dll可以有入口点,dot-net类库也不行。
谢谢,
这是一个不起眼的主题,我将以极快的速度经历它。 每个.NET程序集都有一个非托管入口点,5个字节的机器代码(如果为x64构建,则为9个字节),用作PE32可执行文件头中标记的入口点。 除了JMP指令外,EXE跳转到_CorExeMain()并且DLL跳转到_CorDllMain() 。 这些函数位于mscoree.dll中,并确保加载并初始化CLR,以便它可以执行托管代码。
这些入口点有助于运行托管程序,而无需显式启动VM主机。 避免使用mono.exe或java.exe。 它们实际上不再用于现代Windows版本,操作系统知道包含.NET清单的可执行文件,并且加载程序将作业再次传递给加载程序Shim,mscoree.dll。 这种认识对于实现从包含32位PE32头的EXE中架设64位进程的相当大的技巧是必要的。 Mscoree.dll修补内部加载器数据结构来完成此壮举。
每个.NET程序集还包含一个托管入口点,列在清单标头中。 加载程序集后立即由CLR调用。 EXE总是有一个,它指向Main()方法,编译器确保你不会忘记写一个。 DLL 可能有一个,混合模式程序集总是有一个。 指向位于
类中的模块初始值设定项,C ++ / CLI编译器使用它来确保在任何托管代码可以执行之前初始化CRT(C运行时库)。
不,.NET DLL程序集没有像非托管DLL那样的DllMain
。 但是,在DllMain
实现的所有行为通常可以使用各种.NET构造来实现。 例如:
上述就是C#学习教程:.net dll在c ++ dll中有一个像dll这样的入口点分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1034102.html