Microsoft KB Archive/202197

= BUG: Freeing Resource DLLs in ExitInstance Causes Error =

PSS ID Number: 202197

Article Last Modified on 10/16/2002

-

The information in this article applies to:

 The Microsoft Foundation Classes (MFC), when used with:  Microsoft Visual C++, 32-bit Enterprise Edition 5.0

 Microsoft Visual C++, 32-bit Enterprise Edition 6.0

 Microsoft Visual C++, 32-bit Professional Edition 5.0

 Microsoft Visual C++, 32-bit Professional Edition 6.0</li></ul>

 Microsoft Visual C++, 32-bit Learning Edition 6.0</li></ul>

 Microsoft Visual C++ .NET (2002)</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q202197

<div class="symptoms_section">

SYMPTOMS
In Windows 95, calling FreeLibrary on the resource DLLs in the ExitInstance function of the COleControl-derived class causes an application error.

<div class="cause_section">

CAUSE
This is a bug in Windows 95. When FreeLibrary is called on resource DLLs, Windows 95 is running through the chain of DLLs in that process and looking for other DLLs that have a zero reference count. This causes other DLLs to be unloaded too soon.

<div class="resolution_section">

RESOLUTION
Move the FreeLibrary calls to the destructor function of the COleControl-derived class.

<div class="status_section">

STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article.

<div class="moreinformation_section">

Steps to Reproduce Behavior

 * 1) Use Control Wizard to generate an ActiveX control project.
 * 2) Create a non-MFC resource-ONLY DLL. Make sure you specify the /NOENTRY switch in the Project, Settings dialog box.
 * 3) Call LoadLibrary in InitInstance of the control's CWinApp-derived class.
 * 4) Call FreeLIbrary in ExitInstance of the control's CWinApp-derived class.
 * 5) Build the resource-ONLY DLL and the ActiveX control projects. Make sure the .dll file is being placed in the same directory as the .ocx file.
 * 6) At the MS-DOS prompt, change to the directory where both the .ocx and .dll files are found. Type "REGSVR32 mycontrol.OCX".

RESULTS: You will get an application error dialog box and the "control is registered successfully" dialog box.

<div class="references_section">