BUG: ATL ActiveX Controls Fail on Windows 95 When Hosting ActiveX Controls
ID: Q239916
|
The information in this article applies to:
-
The Microsoft Active Template Library (ATL) 3.0
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.
- 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.
- Comment out the following lines in Stdafx.h:
/* comment this block of code out if you intend to run without DCOM!
#define STRICT
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
*/
- 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.
STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article.
MORE INFORMATION
Steps to Reproduce Behavior
- Create an ATL composite control.
- Place an ActiveX control on the composite control using the resource editor; for instance, use Microsoft Calendar control.
- Build the project using the Release MinDependency build configuration to limit redistribution components needed on target computers.
- Create an MFC Dialog-based application and accept all of the defaults.
- Add the ATL composite control to the dialog using the resource editor.
- 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.
- Build the MFC project.
- Install the MFC application on Windows 95 without DCOM installed.
- Register the control on the computer with Windows 95.
- 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 : kbActiveX kbCOMt kbContainer kbCtrlCreate kbDCOM kbDlg kbLicensing kbVC600bug kbWinOS95 kbATL300bug kbGrpMFCATL
Version : WINDOWS:3.0
Platform : WINDOWS
Issue type : kbbug