Note that there are some explanatory texts on larger screens.

plurals
  1. POFreeLibrary vs implicit unloading DLL
    text
    copied!<p>I have implemented a DLL including DllMain() entry function:-</p> <pre><code>BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { case DLL_PROCESS_ATTACH: /* here im doing file memory mapped through CreateFileMapping() API and using it through MapViewOfFile() API storing some data structure in the file mapped area */ ... case DLL_THREAD_ATTACH: ... case DLL_THREAD_DETACH: ... case DLL_PROCESS_DETACH: /* Here unmapping first through UnmapViewOfFile() API then tries to access the stroed data structure which is illegal as we have already closed the file mapping This is the buggy code. The order should be first access the mapped memory region and then unmap it */ cout &lt;&lt;" some message"&lt;&lt;endl; ... } </code></pre> <p>Unfortunately i made a mistake in DLL_PROCESS_DETACH case and accessing illegal memorey (access violation). </p> <p>I made a sample program which loads the library using LoadLibrary() function, uses the library function and finally call FreeLibrary() and return.</p> <p>When i executed this program, i didnt get any error message. But if i remove FreeLibrary(), in that case the DLL_PROCESS_DETACH case is executed implicitly and this time it gives error dialog box mentioning that there is access violation.</p> <p>Why calling FreeLibrary() suppress this error? OR internally it handles this exception? What is suggested way.</p> <p>Update: I have added details for ATTACH and DETACH. Probably it will help why i am not clear about the behavior observed. With FreeLibrary() call, i didnt get any error message but the cout message was not displayed. It seems crashed too but not being bnotified. But if i remove FreeLibrary(), in that case the DLL_PROCESS_DETACH case is executed implicitly and gives access violation dialog box. Ideally in former case as well, it should display the error. So i am guessing the FreeLibrary() suppresses this access violation error.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload