即使没有包装在外部"C"中,也会调用 DllMain() ?

DllMain() being called even when not wrapped in extern "C"?

本文关键字:调用 DllMain 包装 外部      更新时间:2023-10-16

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

据我所知,这个DllMain()方法使用C++链接,但它被正确地调用了。

在的某个地方是否存在允许调用具有C++链接(因此名称有误)的DllMain()方法的特殊情况

操作系统不会直接调用代码的DllMain函数()。DLL自己的RTL在内部调用它。RTL的真正入口点在DLL PE头中公开,这样操作系统就可以找到它。操作系统调用RTL的入口点,然后它调用代码的DllMain()函数。DllMain()的链接本身对操作系统并不重要,只对链接器重要。

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

有关__stdcall和APIENTRY的作用,请参阅MSDN文档?。