Я пишу DLL, которая должна динамически вызывать отдельную DLL несколько раз. Я хотел бы сохранить вызываемого абонента, а затем просто выгрузить его, когда моя DLL выгружается. Но, по словам Microsoft, это плохая идея .
Функция точки входа должна только
выполнять простые задачи инициализации
и не должен вызывать любую другую DLL
функции загрузки или завершения. За
Например, в функции точки входа,
Вы не должны прямо или косвенно
вызвать функцию LoadLibrary или
Функция LoadLibraryEx. Дополнительно,
Вы не должны вызывать FreeLibrary
функционировать, когда процесс
терминатор.
Вот код ошибки. Может кто-нибудь объяснить, почему я не должен вызывать LoadLibrary и FreeLibrary из точки входа моей DLL?
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call) {
case DLL_PROCESS_DETACH :
if (hLogLib != NULL) FreeLibrary(hLogLib);
break;
}
return TRUE;
}