Microsoft KB Archive/177135

= PRB: Do not Call ODBC Within DLL_PROCESS_DETACH Case =

Article ID: 177135

Article Last Modified on 12/8/2003

-

APPLIES TO


 * Microsoft Visual C++ 5.0 Enterprise Edition
 * Microsoft Visual C++ 6.0 Enterprise Edition
 * Microsoft Visual C++ 5.0 Professional Edition
 * Microsoft Visual C++ 6.0 Professional Edition
 * Microsoft Visual C++ 6.0 Standard Edition
 * Microsoft Data Access Components 2.5
 * Microsoft Data Access Components 2.6

-



This article was previously published under Q177135



SYMPTOMS
When using the MFC Database classes or calling ODBC functions within the DLL_PROCESS_DETACH case of the DllMain function, an access violation can occur especially if the DLL links to the MFC DLL (which does a LoadLibrary call to call ODBC). For example, calling CDatabase::Close from the destructor of a global static object in the DLL causes an access violation error in ODBC32.DLL.



CAUSE
Because there are no guarantees of the order by which DLLs receive the DLL_PROCESS_DETACH case, it is possible that the ODBC handle memory can be freed before your DLL's DllMain function gets called with DLL_PROCESS_DETACH. Therefore, any calls to ODBC using those handles can cause a crash.



RESOLUTION
Do not call ODBC functions or use the MFC ODBC classes in destructors of global objects within DLLs or in the DllMain DLL_PROCESS_DETACH case.

Instead use a termination function in the DLL which the application can call before exiting.



STATUS
This behavior is by design.

Additional query words: crash hang hung halts GPF AV inproc kbmfc kbVC500 kbVC600

Keywords: kbdatabase kbprb KB177135

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.