PRB: CAxWindow Members Can Cause a Memory Leak (229904)



The information in this article applies to:

  • The Microsoft Active Template Library (ATL) 3.0, when used with:
    • Microsoft Visual C++, 32-bit Enterprise Edition 6.0
    • Microsoft Visual C++, 32-bit Professional Edition 6.0
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET (2003)
    • Microsoft Visual C++ .NET (2002)

This article was previously published under Q229904

SYMPTOMS

The CAxWindow CreateControl() and AttachControl() functions may leak memory if not used correctly.

CAUSE

The following two techniques of creating ActiveX controls on composite controls (or any window supporting ATL containment) can result in memory leaks.
//Intialize ATL control containment.
AtlAxWinInit();

//Create container window.
HWND hWndCont = m_ax.Create(m_hWnd, rect, 0, WS_CHILD | WS_VISIBLE);

//Create & activate ActiveX control
HRESULT hr = m_ax.CreateControl("MSCAL.Calendar");
				
-OR-
//Intialize ATL control containment.
AtlAxWinInit();
//Create container window
HWND hWndCont = m_ax.Create(m_hWnd, rect, 0, WS_CHILD | WS_VISIBLE);

// Create ActiveX control.
CComPtr<IUnknown> spunk;
HRESULT hr = CLSIDFromProgID(OLESTR("MSCAL.Calendar"), &clsid);
hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL, IID_IUnknown, (void**)&spunk);

// Activate ActiveX control.
HRESULT hr = m_ax.AttachControl(spunk);
				
In both techniques, the calls to Create() results in the creation of a CAxHostWindow object. The call to CreateControl() or AttachControl() also creates another CAxHostWindow Object. Upon destruction, the CAxHostWindow object created by Create() is freed.

RESOLUTION

Use one of the techniques mentioned in article Q218442 to create ActiveX controls at run time.

STATUS

This behavior is by design.

REFERENCES

For additional information, click the article number below to view the article in the Microsoft Knowledge Base:

192560 HOWTO: Adding ATL Control Containment Support to Any Window

218442 HOWTO: Programmatically Add ActiveX Controls to Composite Control


Modification Type:MajorLast Reviewed:9/18/2003
Keywords:kbCtrl kbpending kbprb KB229904