DllMain()即使没有包含在外部“C”中也被调用?

时间:2015-11-10 20:43:25

标签: c++ windows dll linker

在用C ++(64位Windows)编写的DLL中,不应将DllMain()声明为使用C链接,即用extern "C" { }包裹?

据我所知,this DllMain() method正在使用C ++链接,但它被正确调用。

是否有一些特殊情况某处允许调用带有C ++链接的DllMain()方法(因此带有错位名称)?

2 个答案:

答案 0 :(得分:2)

操作系统不会直接调用代码的DllMain函数()。 DLL自己的RTL在内部调用它。 RTL的实际入口点在DLL PE头中公开,因此操作系统可以找到它。操作系统调用RTL的入口点,然后调用代码的DllMain()函数。 DllMain()本身的链接与操作系统无关,只与链接器有关。

答案 1 :(得分:-1)

APIENTRY就是这样做的。归结为__stdcall。

请参阅the MSDN documentation for __stdcallWhat does APIENTRY do?