C++ __VC中的属性_u((析构函数))等价物?

C++ __VC中的属性_u((析构函数))等价物?,c++,c,visual-c++,C++,C,Visual C++,我已经研究了和,它们对于gcc特定的\uuuu属性((构造函数))都很有帮助。但是\uuuu属性((析构函数))呢?是否有VC等价物?如果您正在创建动态链接库,您可以这样处理: BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { if (fdwReason == DLL_PROCESS_ATTACH) { // equivalent of __attribut

我已经研究了和,它们对于gcc特定的
\uuuu属性((构造函数))
都很有帮助。但是
\uuuu属性((析构函数))
呢?是否有VC等价物?

如果您正在创建动态链接库,您可以这样处理:

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH)
    {
        // equivalent of __attribute__((constructor))...

        // return TRUE if succeeded, FALSE if you failed to initialize properly
        return TRUE; // I'm assuming you succeeded.
    }
    else if (fdwReason == DLL_PROCESS_DETACH)
    {
        // equivalent of __attribute__((destructor))...
    }

    // Return value is ignored when fdwReason isn't DLL_PROCESS_ATTACH, so we'll
    // just return TRUE.
    return TRUE;
}

您链接的答案提供了一个等效的功能,使用atexit请参见库的情况-在
DllMain
中,您几乎无法安全地执行任何操作(阅读:调用Kernel32.dll的函数,只要它们不加载库-实际上没有其他操作)。不幸的是,其他方法(
atexit
等)并没有更好,因为它们往往是通过
DllMain
实现的。在这种情况下,重写代码往往是一个简单的选择。可能重复的代码很有趣,实际上似乎比gcc的
\uuuu属性\uuuu
更清晰。我会留意关于
DllMain
的警告,看看我能做些什么。谢谢