2013-12-21 3 views
4

Я просмотрел __attribute__((constructor)) equivalent in VC? и CRT Initialization, которые были полезны в отношении gcc-специфического __attribute__((constructor)). Но как насчет __attribute__((destructor))? Есть ли эквивалент VC?__attribute __ ((деструктор)) эквивалент в VC?

+0

ответ вы связаны дает эквивалентные функциональные возможности, с использованием atexit См http://msdn.microsoft .com/en-us/library/tze57ck3.aspx – manuell

+1

В случае с библиотеками - очень мало вы можете сделать безопасно в 'DllMain' (чтение: функции вызова Kernel32.dll до тех пор, пока они не загружают библиотеки - и практически ничего больше). К сожалению, другие методы ('atexit' и т. Д.) Не намного лучше, поскольку они, как правило, реализуются через' DllMain'. В таких случаях переписать код, как правило, легко. –

+0

Возможный дубликат атрибута [\ _ \ _] \ _ \ _ ((конструктор)) эквивалентен в VC?] (Http://stackoverflow.com/questions/1113409/attribute-constructor-equivalent-in-vc) – jww

ответ

2

Если вы делаете динамическую библиотеку, вы можете сделать свой DllMain entry point справиться с этим:

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; 
} 
+0

Интересно и на самом деле кажется более понятным, чем gcc '__attribute__'. Я прислушаюсь к предупреждениям о 'DllMain' и посмотрю, что я могу сделать. Благодаря! – nonexplosive

Смежные вопросы