Возможно ли корректно инициировать выгрузку DLL из самой DLL так, чтобы она обязательно выгрузилась? Если можно, кусочек кода на закуску. Заранее благодарен
Можно попробовать так (самому выгрузится, а адрес возврата укажет на exe) Код (Text): stdcall [GetModuleHandle],dll_name xchg eax,[esp] push eax jmp [FreeLibrary]
А в MSDN никто не догадался заглянуть? Код (Text): The FreeLibraryAndExitThread function decrements the reference count of a loaded dynamic-link library (DLL) by one, just as FreeLibrary does, then calls ExitThread to terminate the calling thread. The function does not return. void FreeLibraryAndExitThread( HMODULE hModule, DWORD dwExitCode ); Parameters hModule [in] Handle to the DLL module whose reference count the function decrements. The LoadLibrary or GetModuleHandle function returns this handle. dwExitCode [in] Exit code for the calling thread. Return Values This function does not return a value. Invalid module handles are ignored. Remarks The FreeLibraryAndExitThread function allows threads that are executing within a DLL to safely free the DLL in which they are executing and terminate themselves. If they were to call FreeLibrary and ExitThread separately, a race condition would exist. The library could be unloaded before ExitThread is called.
Ms Rem FreeLibraryAndExitThread не решает проблемы по крайней мере в том варианте применения, который есть у меня. Если я в DLL в каком-то месте ставлю вызов этой функции, у меня DLL выгружается но вместе с приложением. Я пробовал вызывать эту функцию в отдельном потоке но все равно вылетает с приложением. Sickle хорошая идея, надо попробовать bogrus попробуем
Если кому интересно. VirtualAlloc, вызванная из DLL, выделяет память в процессе, в АП которого загружена DLL. Так что проблема почти решилась