首先调用哪个,DllMain()还是全局静态对象构造函数?
我正在编写一个DLL,它定义了一个全局静态对象 在对象的构造函数中,我正在进行一些初始化,这些初始化可能会成功,也可能不会成功 是否可以在DllMain()中发出初始化过程成功或失败的信号?这两个中哪一个被称为第一个 谢谢。MSDN的文档说明: 如果您的DLL与C 运行时库(CRT),条目 CRT提供的点调用 的构造函数和析构函数 全局和静态C++对象。 因此,这些限制 DllMain也适用于施工人员和 析构函数和任何 他们打电话来 由于DllMain中的代码可能使用静态对象,因此必须在运行DllMain以进行DLL\u进程\u附加之前构造静态对象,并在运行DllMain以进行DLL\u进程\u分离之后销毁静态对象 您可以使用简单的测试exe和测试dll来验证这一点 EXE: 动态链接库: 这些文件将一起打印:首先调用哪个,DllMain()还是全局静态对象构造函数?,dll,object,static,constructor,global-variables,Dll,Object,Static,Constructor,Global Variables,我正在编写一个DLL,它定义了一个全局静态对象 在对象的构造函数中,我正在进行一些初始化,这些初始化可能会成功,也可能不会成功 是否可以在DllMain()中发出初始化过程成功或失败的信号?这两个中哪一个被称为第一个 谢谢。MSDN的文档说明: 如果您的DLL与C 运行时库(CRT),条目 CRT提供的点调用 的构造函数和析构函数 全局和静态C++对象。 因此,这些限制 DllMain也适用于施工人员和 析构函数和任何 他们打电话来 由于DllMain中的代码可能使用静态对象,因此必须在运行Dl
Main, loading library
Moo, constructor
DllMain, DLL_PROCESS_ATTACH
Main, freeing library
DllMain, DLL_PROCESS_DETACH
Moo, destructor
Main, exiting
正如您所看到的,静态对象是在DllMain(…,DLL\u PROCESS\u ATTACH,…)
之前构造的,在DllMain(…,DLL\u PROCESS\u DETACH,…)之后销毁的。
struct Moo
{
Moo() { wprintf(L"Moo, constructor\n"); }
~Moo() { wprintf(L"Moo, destructor\n"); }
};
Moo m;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
wprintf(L"DllMain, DLL_PROCESS_ATTACH\n");
break;
case DLL_THREAD_ATTACH:
wprintf(L"DllMain, DLL_THREAD_ATTACH\n");
break;
case DLL_THREAD_DETACH:
wprintf(L"DllMain, DLL_THREAD_DETACH\n");
break;
case DLL_PROCESS_DETACH:
wprintf(L"DllMain, DLL_PROCESS_DETACH\n");
break;
default:
wprintf(L"DllMain, ????\n");
break;
}
return TRUE;
}
Main, loading library
Moo, constructor
DllMain, DLL_PROCESS_ATTACH
Main, freeing library
DllMain, DLL_PROCESS_DETACH
Moo, destructor
Main, exiting