C++ __VC中的属性_u((析构函数))等价物?
我已经研究了和,它们对于gcc特定的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
\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
的警告,看看我能做些什么。谢谢