Microsoft KB Archive/239916

= FIX: ATL ActiveX Controls Fail on Windows 95 When Hosting ActiveX Controls =

Article ID: 239916

Article Last Modified on 10/15/2002

-

APPLIES TO


 * Microsoft ActiveX Template Library 3.0

-



This article was previously published under Q239916



SYMPTOMS
When running Windows 95 without DCOM installed, an ATL AppWizard generated composite control will not create properly if it hosts any ActiveX controls whether they are licensed or unlicensed.



CAUSE
When ATL calls CoCreateInstance to create the contained controls it uses CLSCTX_SERVER for the context parameter. CLSCTX_SERVER is a combination of CLSCTX_INPROC_SERVER, CLSCTX_LOCAL_SERVER and CLSCTX_REMOTE_SERVER. CoCreateInstance will look at CLSCTX_REMOTE_SERVER first because this is not valid on Windows 95 without DCOM; it will cause the creation of the contained control to fail. This will ultimately cause the composite control to fail during creation also.



RESOLUTION
Following are three workarounds for this situation.

 Open ATLHost.h from the \atl\include directory:  Find the function CreateNormalizedObject in Atlhost.h. In CreateNormalizedObject, find the calls to CoCreateInstance on lines 28, 43 and 49. Change the parameter CLSCTX_SERVER to CLSCTX_INPROC_SERVER. Save the modified ATLHost.h file. Rebuild the project. </li>  Comment out the following lines in Stdafx.h:

/* comment this block of code out if you intend to run without DCOM! </li> Install DCOM for Windows 95. You can get it from the following Web site: Windows Update Site. You could also install Internet Explorer 4 or higher as it will install DCOM.</li></ol>
 * 1) define STRICT
 * 2) ifndef _WIN32_WINNT
 * 3) define _WIN32_WINNT 0x0400
 * 4) endif

<div class="status_section">

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

This problem was corrected in Microsoft Visual C++ .NET.

<div class="moreinformation_section">

Steps to Reproduce Behavior

 * 1) Create an ATL composite control.
 * 2) Place an ActiveX control on the composite control using the resource editor; for instance, use Microsoft Calendar control.
 * 3) Build the project using the Release MinDependency build configuration to limit redistribution components needed on target computers.
 * 4) Create an MFC Dialog-based application and accept all of the defaults.
 * 5) Add the ATL composite control to the dialog using the resource editor.
 * 6) Link to MFC statically by going to Projects, Settings, and then click the General tab. This will again limit redistribution components needed on target computers.
 * 7) Build the MFC project.
 * 8) Install the MFC application on Windows 95 without DCOM installed.
 * 9) Register the control on the computer with Windows 95.
 * 10) Attempt to run the MFC application.

You should get a failure to show the dialog on the computer with Windows 95.

Additional query words: Regsvr32.exe host composite fail ATLHOST

Keywords: kbbug kbfix kbnoupdate kbcontainer kbctrlcreate kbdcom kblicensing kbdlg KB239916

-

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

© Microsoft Corporation. All rights reserved.