在用C ++(64位Windows)编写的DLL中,不应将DllMain()
声明为使用C链接,即用extern "C" { }
包裹?
据我所知,this DllMain()
method正在使用C ++链接,但它被正确调用。
是否有一些特殊情况某处允许调用带有C ++链接的DllMain()
方法(因此带有错位名称)?
答案 0 :(得分:2)
操作系统不会直接调用代码的DllMain
函数()。 DLL自己的RTL在内部调用它。 RTL的实际入口点在DLL PE头中公开,因此操作系统可以找到它。操作系统调用RTL的入口点,然后调用代码的DllMain()
函数。 DllMain()
本身的链接与操作系统无关,只与链接器有关。
答案 1 :(得分:-1)
APIENTRY就是这样做的。归结为__stdcall。
请参阅the MSDN documentation for __stdcall和What does APIENTRY do?。