DOCUMENT:Q156934 22-FEB-2002 [visualc] TITLE :INFO: Visual C++ 4.2b Patch PRODUCT :Microsoft C Compiler PROD/VER::4.2 OPER/SYS: KEYWORDS:kbenv kbfile kbinterop kbole kbtool kbnokeyword kbMFC kbVC420 kbWinsock kbGrpDSMFCATL k ====================================================================== ------------------------------------------------------------------------------- The information in this article applies to: - Microsoft Visual C++, 32-bit Enterprise Edition, version 4.2 - Microsoft Visual C++, 32-bit Professional Edition, version 4.2 ------------------------------------------------------------------------------- SUMMARY ======= This is a technology update for Visual C++ 4.2, which updates Visual C++ 4.2 retail installation to work with the final release of the Win32 and ActiveX SDKs. In addition, AppWizard, ClassWizard and BSCMAKE.EXE have also been updated. For a list of details on what exactly has been updated, please see MORE INFORMATION section below or read the README.TXT file included in the patch. If you downloaded the Visual C++ 4.2a patch from the Microsoft Web site, you will need to upgrade to Visual C++ 4.2b, using the 42bb1b2.EXE file shown below. There are four self-extracting files available. These files contain different combinations of the patch. You should download the proper self- extracting files that best suit your needs. Following is a brief description of these four files: VC42B.EXE --------- This file includes all components of the patch. It updates: 1. The Win32 and ActiveX SDKs to the final release. 2. MFC headers and libraries to sync up with the SDKs. 3. AppWizard, ClassWizard and BSCMAKE.EXE. If you would like to patch all components in Visual C++ 4.2, you should download this file. Following is a list of files included in this self- extracting file: readme.txt - Release notes for the patch. install.txt - Patch install instructions. patch-nt.exe - The executable which runs the patch script. patchw32.dll - Support dll for patch-nt.exe. vc42b.rtp - The patch file for the \msdev tree. dll42b.rtp - The patch file for the MFC dlls in the \windows\system or \windows\system32 directory. For the MFC-only or SDK-only patch, please see the descriptions for MSDEV42B.EXE and SDK42B.EXE below. 42BB1B2.EXE ----------- Use this patch instead of VC42b.EXE if you have downloaded and applied the Visual C++ 4.2a patch. This file only updates files modified by the Visual C++ 4.2a patch. Following is a list of files included in this self- extracting file: readme.txt - Release notes for the patch. install.txt - Patch install instructions. patch-nt.exe - The executable which runs the patch script. patchw32.dll - Support dll for patch-nt.exe. vc42b2.rtp - The patch file for the \msdev tree. dll42b2.rtp - The patch file for the MFC dlls in the \windows\system or \windows\system32 directory. Note that when running this patch, it assumes you have the MFCCLSWZ.DLL from VC 4.2 installed in the MSDEV\BIN directory. You can copy the original MFCCLSWZ.DLL from Visual C++ 4.2 CD under the \msdev\bin\mfcclswz.dll directory. MSDEV42B.EXE ------------ This file doesn't update the SDK components. You must have received the final Win32 and ActiveX SDK files elsewhere. This file only patches MFC to sync up with the release version of the Win32 and ActiveX SDKs. The patch also updates AppWizard, ClassWizard and BSCMAKE.EXE. Following is a list of files included in this self-extracting file: readme.txt - Release notes for the patch. install.txt - Patch install instructions. patch-nt.exe - The executable which runs the patch script. patchw32.dll - Support dll for patch-nt.exe. msdev42b.rtp - The patch file for the \msdev\mfc tree. dll42b.rtp - The patch file for the MFC dlls in the \windows\system or \windows\system32 directory. For the SDK patch, please download SDK42B.EXE. SDK42B.EXE ---------- This file patches Win32 and ActiveX SDKs in \msdev\include and \msdev\lib directories. It also patches AppWizard, ClassWizard and BSCMAKE.EXE. However, it doesn't patch MFC include and library files. If you haven't downloaded the MFC patch yet, you should do so, if your applications are MFC based. This file includes: readme.txt - Release notes for the patch. install.txt - Patch install instructions. patch-nt.exe - The executable which runs the patch script. patchw32.dll - Support dll for patch-nt.exe. sdk42b.rtp - The patch file for the \msdev\include and \msdev\lib directories. For the MFC patch, please download MSDEV42B.EXE. For a list of files the patch updates, please see the following articles in the Microsoft Knowledge Base: Q160491 Information on Files Modified by VC42b Patch: Part 1 of 4 Q160496 Information on Files Modified by VC42b Patch: Part 2 of 4 Q160505 Information on Files Modified by VC42b Patch: Part 3 of 4 Q160506 Information on Files Modified by VC42b Patch: Part 4 of 4 The following files are available for download from the Microsoft Download Center: Vc42b.exe 42bb1b2.exe (http://support.microsoft.com/download/support/mslfiles/42bb1b2.exe) Msdev42b.exe (http://support.microsoft.com/download/support/mslfiles/Msdev42b.exe) Sdk42b.exe This patch updates MFC files, as well as AppWizard, ClassWizard and BSCMAKE.EXE, and, optionally, the Win32 SDK and ActiveX SDK components. MFC4.2 has support for the new ActiveX technologies in the ActiveX SDK. However, the support was based on a beta version of the SDK and some changes were necessary to make MFC work properly with the final versions of the ActiveX components. These components ship with Internet Explorer version 3.0 and the ActiveX SDK. In addition to these changes, a number of problems were also fixed in MFC, OLE Control and Winsock support and are covered in the MORE INFORMATION section below. Also, there was a minor code change necessary for MFC ActiveX Document support; the code generated by AppWizard has been updated as well. There are three fixes in ClassWizard: 1. Performance improvement for projects with a large number of classes (100 or more). Previously, ClassWizard was slow to appear, and there was a significant delay when switching tabs. 2. Data members are now saved without closing ClassWizard. Previously, if you added data members and did not immediately close ClassWizard, the data members were not saved. Therefore, switching among the pages in ClassWizard caused the newly-added data members to be lost. 3. Member functions are now saved without editing the source code. Previously, if you added member functions and did not edit the code immediately after adding the member functions, the member functions were not saved. Therefore, switching among the pages in ClassWizard caused the newly-added member functions to be lost. We have updated BSCMAKE.EXE to fix a crashing problem on Windows NT and also to correct a problem with the .BSC file being corrupted on Windows 95. The MFC 4.2 Reference also needs to be updated. Below is a summary of the changes. 1. COleDateTime - two-digit dates are no longer valid. You must specify a date of 100 or greater. 2. CInternetSession::OpenURL - two new flags added, INTERNET_FLAG_TRANSFER_ASCII and INTERNET_FLAG_TRANSFER_BINARY, to open files in text mode or binary mode. 3. CAsyncMonikerFile changes - new member function CreateBindStatusCallback default binding changed from data-pull mode to data-push mode in GetBindInfo. 4. To implement asynchronous monikers in ClassWizard, choose BSTR from the Add Property type list, not OLE_DATAPATH. OLE_DATAPATH still exists as a type choice, but you should not use it because it is no longer defined in the headers. MORE INFORMATION ================ Below is a description of the bugs fixed in Visual C++ 4.2b patch. This information is also available in the README.TXT included in the patch. In each category, bugs that fit the general category are followed by bugs specific to a particular class in the MFC Library, in alpha order by class affected. ActiveX Controls ---------------- - The implementation of the global function PX_DataPath passed a CString instead of a reference to a CString. This caused an access violation in a DoPropExchange call. This has been corrected. - An incorrectly defined constant (OLEMISC_WANTSTOMENUMERGE) in one of the OLE header files caused menu merging between MFC ActiveX controls and OLE containers based on the latest SDK header files to be handled incorrectly. The value assigned to this constant has been corrected. - Changes made to the implementation of MFC ActiveX controls in MFC 4.2 caused Borland Delphi ActiveX containers to malfunction. Events sent by MFC ActiveX controls were not being received properly by Delphi. Subsequent changes to the MFC implementation have worked around this problem and the MFC ActiveX controls now function properly inside Delphi containers. - MFC ActiveX controls that use a sub-classed button control (such as the sample BUTTON control) did not correctly detect single-click events. A small change to the implementation of CWnd::OnXButtonUp fixes this bug. - During quick activation of an ActiveX control, a missing call to IViewObject::SetAdvise prevented controls from repainting correctly in some containers. This call has been added and the bug is fixed. - ActiveX controls created with MFC caused invalid ASSERTs in some OLE control containers. This bug has been fixed and the ActiveX controls should behave as expected. COleControl Bugs ---------------- - A bug in the implementation of COleControl caused a memory leak if no property pages existed for an ActiveX control. This behavior has been fixed. - Code in the COleControl in-place deactivation implementation was inadvertently reactivating the control. This bug has been fixed. - A bug in COleControl::GetDataSource caused an ASSERT to fire because the module state was not being set for an AppWizard-generated MFC ActiveX control. This problem has been fixed. - A regression in MFC 4.2 in the COleControl::SetClientSite implementation caused MFC ActiveX controls to malfunction. This bug has been fixed and the pointer to the ambient property interface is now released correctly. Database -------- - A small change to CDaoRecordset::Open fixed an inappropriate ASSERT that checks the nOpenType parameter. This ASSERT now correctly checks for the dbOpenTable type. Internet -------- - The header file, DATAPATH.H, has been dropped from the Internet SDK. Appropriate changes to the MFC header files have been made, and the changes are transparent to existing MFC applications. - The ISAPIVERIFY macro was incorrectly defined in the header file, which caused the macro to not function in release builds. This bug has been fixed. AfxParseURL Bugs ---------------- - A small error in the implementation of the services table for the global function AfxParseURL has been corrected. This change does not affect the documentation. - AfxParseURL no longer hangs if the URL has white space. A fix to the implementation checks the string and correctly handles this condition. - The implementation of AfxParseURL has been updated so that it correctly interprets the "file://" prefix for a URL. CAsyncMoniker Bugs ------------------ - An uncaught exception in the call to member function CAsyncMonikerFile::Close could cause the program to crash. This bug has been fixed, and the open CAsyncMonikerFile closes correctly. - The implementation of CAsyncMoniker::Close was improperly calling IBinding::Abort. The implementation has been fixed. - The implementation of CAsyncMonikerFile did not properly release the IBinding interface. This bug has been fixed by adding the missing call. - The implementation of CAsyncMonikerFile now uses the data-push model by default instead of the data-pull model as documented in CAsyncMonikerFile::GetBindInfo. - Binding synchronously in a CAsyncMonikerFile object caused an invalid ASSERT. A correction has been made to the implementation of CAsyncMonikerFile::Attach to fix this bug. - As in the previous bug, the incorrect module state was set when releasing IBindStatusCallback in a CAsyncMoniker file. The bug has been fixed and the URL moniker DLL also released at the proper time. CHttpConnection Bug ------------------- - In the CHttpConnection::OpenRequest member function, if a value other than 1 was assigned for the dwContext parameter, an incorrect value was set to m_dwContext by the function. This behavior has been corrected. CHttpFile Bugs -------------- - The implementation of CHttpFile::GetFileURL was incorrectly building the URL. This bug has been fixed. - A bug in the implementation of CHttpFile::GetObject caused the return value to be an empty string instead of a file name. This error has been fixed. CHttpServer Bug --------------- - Code has been added to the implementation of CHttpServer::HttpExtensionProc to correctly handle ISAPI result code 302 (URL Redirect). CInternetException Bug ---------------------- - CInternetException wasn't properly exported from DLL version of MFC and its use in a project could sometimes cause the linker to report unresolved externals. CInternetFile Bugs ------------------ - The diagnostic function, CInternetFile::AssertValid, was implemented without allowing for all of the valid handle types included for FTP and GOPHER files. Any one of several handle types are valid in response to a request received for a file handle. The AssertValid member function has been corrected to include all valid handle types for these files. - The implementation of member function CInternetFile::ReadString failed if no buffer size was set prior to calling the function. This has been fixed. - A bug in the implementation of CInternetFile::SetReadBufferSize caused errors in reading the buffer for copy operations. This bug has been fixed. - A bug in the implementation of CInternetFile::Seek caused this member function to not work correctly if a read buffer was set. A new ASSERT warns if this condition exists. - A redundant call to the member function Flush has been removed from the implementation of CInternetFile::Seek. This change is transparent to users. - A small change to the implementation of CInternetFile::Read now corrects a problem in handling the read buffer when the number of bytes to be read was greater than the buffer size. - A bug in the implementation of the CInternetFile constructor incorrectly managed an internal data structure, and this could cause MFC to crash when processing status callbacks for CInternetSession objects related to the file object. This bug has been fixed. CInternetSession Bugs --------------------- - An additional flag parameter has been added for the CInternetSession::OpenURL member function. For a full description, please see the README.TXT file. - A change in CInternetSession::OpenURL assures that this member function and CHttpConnection both work correctly with secured HTTP sites. There is a new override of CHttpConnection::GetHttpConnection documented in the README.TXT. - The client-side MFC Internet classes are now thread-safe due to a change to the implementation of CInternetSession. CMonikerFile Bugs ----------------- - The CMonikerFile::Attach member function was not correctly handling the pointer to the IStream interface. This bug has been fixed, and CMonikerFile objects behave as expected. - The implementation of CMonikerFile::Detach in MFC 4.2 did not properly detach from the COleStreamFile object and caused an exception. A separate implementation of CMonikerFile::Flush has corrected the problem. - A memory leak was detected in the implementation of CMonikerFile::Attach. Fixing this bug frees the memory allocated for the URL. MFC APIs -------- - The template helper CopyElements had a code error that caused CArray::Copy and CArray::Append to malfunction. The error has been corrected and these two member functions should behave as expected. - The length of a string allocated for CException::ReportError has been increased to accommodate longer error messages. - An error in the implementation of CFileFind::GetFileTitle caused this member function to return the file extension as well as the file title. This bug has been fixed. - A bug in the implementation of CMemFile also affected class COleControlSite. This bug has been fixed and the memory errors it caused have been eliminated. - An error in the implementation of CRichEditView::FindTextSimple prevented text containing multibyte characters from being located by the text search. This bug has been fixed and text search now works correctly. - A call to CString::Empty instead of the CString destructor in the implementation of CStatusBar caused the status bar to display incorrectly. This call has been changed to use the destructor and the status bar now behaves as expected. - An error in the implementation of CView::OnEndPrintPreview caused an invalid ASSERT when the print preview window closed. This bug has been fixed. - Earlier bug fixes in MFC 4.2 caused a regression in the implementation of CWinApp::ProcessShellCommand in MFC 4.2. Correcting the code now permits an SDI application's main window to come up initially maximized. - A bug in the macro ON_REGISTERED_THREAD_MESSAGE prevented both this macro and the CWinThread::PostThreadMessage from working properly. The error has been corrected and threading messages should behave as expected. - The implementation of CWinThread::PreTranslateMessage in MFC 4.2 was preventing timer callback functions from being called. A small change to the implementation now correctly detects and routes the WM_TIMER messages. - A value passed in the LPARAM of the WM_MOVE message was being incorrectly propagated by CWnd::OnMove. This bug has been fixed and OnMove behaves as expected. MFC Sockets ----------- - A blocking CSocket call would occasionally hang when a timer message was active. This occurred because the checking of timer message in CSocket::PumpMessages was occurring before a check for the socket notification message. This bug has been fixed and applications that use this code should see an overall improvement in speed. - Calls to CSocket::Accept would not block properly when accepting a connecting socket. The error code returned from the Accept call was being reset by another function that is part of the Accept implementation. This bug has been fixed and CSocket::Accept now blocks as expected. OLE --- - An ambiguous TRACE message that appears in Debug mode after an OLE object is created has been removed from the implementation of class COleClassFactory. This message no longer applies given the changes to MFC's OLE apartment model threading implementation. - MFC occasionally caused Windows to deadlock while unloading DLLs that implement OLE objects. This error has been fixed in the implementation of class CWinThread. OLE Document Objects -------------------- - MFC DocObject servers were not displaying correctly in an HTML page when used in Internet Explorer 3.0 because in-place activation had not been implemented. This bug has been fixed, and DocObject servers now behave correctly inside Internet Explorer 3.0. - The merging of the Help menu for activated DocObjects was not functioning correctly. This bug has been fixed and the Help menu for the DocObject now appears on a submenu along with the name of the object. - In the global function ON_OLECMD, sending the OLECMDID_PRINTPREVIEW flag to an embedded DocObject server caused an assertion in MFC's Print Preview implementation. This bug has been fixed. - An AppWizard-generated application with OLE Server/Container functionality did not properly handle an AppWizard-generated server application that had ActiveX document server support because the document object DLL was not registered. Such container applications now in place activate the ActiveX servers correctly. CDocObjectServerItem Bugs ------------------------- - A bug in the implementation of DocObjects in MFC caused the CDocObjectServerItem::OnShow member function to fail. This bug has been fixed and DocObjects now activate correctly. - Additional code in the implementation of CDocObjectServerItem::OnShow now verifies that the pointer to a document is a DocObject before activating it. This corrects unexpected behavior with non-DocObject servers in Internet Explorer 3.0. CDocObjectServer Bugs --------------------- - The implementation for the IPrint OLE object in class CDocObjectServer has been corrected, and printing from DocObjects should function correctly. - The implementation of CDocObjectServer had an incorrect return value for its out-of-bounds calls to IOleCommandTarget::QueryStatus. The bug has been fixed. - The implementation of CDocObjectServer also had an incorrect return value for its call to IOleCommandTarget::Exec to display help for a DocObject. This bug has been fixed. - Better allocation of memory in the implementation of CDocObjectServer has corrected a potential memory leak when printing from a DocObject. - The implementation of CDocObjectServer now checks for the correct text flags before handling UPDATE_UI message for COleCmdUI objects. - The implementation of CDocObjectServer also checks for status flags before routing COMMAND_UPDATE_UI notifications to the frame window. COleServerDoc Bug ----------------- - A fix to COleServerDoc::GetDocObjectServer correctly returns a handle to the current DocObject server instead of automatically creating a new one. COleCmdUI Bug ------------- - A change in the implementation of COleCmdUI::DoUpdate corrects the command handling for DocObjects. Resource Editor --------------- - A regression in MFC 4.2 in the COleControl::SetClientSite implementation caused MFC ActiveX controls to malfunction. Viewing the properties of one of these controls using the resource editor caused Devstudio96 to crash. Additional query words: 4.20a 4.20b ====================================================================== Keywords : kbenv kbfile kbinterop kbole kbtool kbnokeyword kbMFC kbVC420 kbWinsock kbGrpDSMFCATL kbNoUpdate Technology : kbVCsearch kbAudDeveloper kbVC420 kbVC32bitSearch Version : :4.2 Issue type : kbinfo ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 2002.