.net dll在c ++ dll中有一个像dll这样的入口点

0 .net c# c++ dll

我真的不确定.net dll是否也有像c ++ dll一样的入口点.我怎么知道.net dll是否有入口点.

我在某地读到WIN32 dll可以有入口点,dot-net class-libraries不行.

谢谢,

Han*_*ant 6

这是一个不起眼的主题,我将以极快的速度经历它.每个.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 可能有一个,混合模式程序集总是有一个例如.指向位于类中的模块初始值设定<Module>项,C++/CLI编译器使用它来确保在任何托管代码可以执行之前初始化CRT(C运行时库).