INFO: Visual Studio 6.0 SP3 Readme: Part 4 - Visual C++
ID: Q230727
|
The information in this article applies to:
-
Microsoft Visual Studio 6.0 SP3
SUMMARY
This Readme file contains updated information for the entire Microsoft Visual Studio suite of developer tools. If you downloaded a Core service pack from the Internet, not all sections of this file apply to the updates you received. The fixed issues appropriate for the Core downloads are those listed in the Visual Studio section plus the sections for the products updated by your Core download.
The Microsoft Visual Studio 6.0 Service Pack 3 Readme contains the following sections:
PART 1: Overview and Installation
PART 2: Visual Studio
PART 3: Visual Basic
PART 4: Visual C++
PART 5: Visual FoxPro
PART 6: Visual InterDev
PART 7: Visual J++
PART 8: Visual SourceSafe
PART 9: File Versions
For the latest product information, see the Visual Studio Web site at:
http://msdn.microsoft.com/vstudio
For the latest product updates, see the Visual Studio Support Highlights site at:
http://support.microsoft.com/support/vstudio
For the latest year 2000 information regarding Microsoft products, see the Microsoft Year 2000 Readiness Disclosure and Resource Center Web Site located at:
http://microsoft.com/year2000
You can also call 1-888-MSFT-Y2K within the United States, toll-free, or contact your local Microsoft subsidiary.
Please see the REFERENCES section below for more information about the other parts of this readme.
MORE INFORMATIONMicrosoft Visual C++
The following is a summary of Visual C++ issues fixed with Service Pack 3, arranged according to issue category and service pack, and a list of known issues. See the listed Knowledge Base articles for more details.
Windows CE ToolKit and Visual Studio 6.0 Service Pack 3
Visual Studio Service Pack 3 overwrites certain Visual C++ 6.0 components that are modified when you install the Microsoft Windows CE Toolkit for Visual C++ 6.0. This means you cannot run the Windows CE Toolkit for Visual C++ 6.0 with Service Pack 3 installed on your machine. Note also that Service Pack 3 does not include an uninstaller. If you install Service Pack 3 and then want to run the Windows CE Toolkit for Visual C++, you must remove Visual C++ 6.0 using the Visual C++ 6.0 uninstaller and then reinstall Visual C++ 6.0 and the Windows CE Toolkit for Visual C++. Future versions of the Windows CE Toolkit for Visual C++ will address this incompatibility with Visual Studio 6.0 Service Pack 3.
ATL Issues
Installing Service Pack 3 on Windows 2000 Beta 3
For information about installing Visual Studio 6.0 Service Pack 3 on Windows 2000 Beta 3, see Installing Service Pack 3 on Windows 2000 later in this article.
ATL Fixes
The following ATL issues have been fixed:
- Q190531 Crashing when passing a NULL pointer to the (ATL-overridden) delete operator or free function.
- Q191626 CComVariant > and < operators cause LNK2001 errors.
- Q194180 Access violations when unregistering an ATL DLL or EXE built with a version of Visual C++ prior to 6.0 on a computer with the Visual C++ 6.0 Atl.dll installed.
- Q198019 Some ATL controls did not size properly.
- Registering an ATL server with a long pathname failed.
- Q217182 Descriptions weren't added to registry when using the DECLARE_REGISTRY() macro.
- Q218829 CComEnumImpl<>::Skip() didn't handle overflow correctly.
- Q222613 "'m_mov' : undeclared identifier" Error With Alpha Project
- Q223165 GetIDsOfNames( ) Returns DISP_E_UNKNOWNNAME For Named Args
Compiler/Linker/Build Issues
The following build issues have been fixed:- Q187280 An incorrect version of Cvtres.exe, used by the linker to convert resource files into COFF format, caused some multiple-language resources to be unavailable to the application.
- Q192539 A friend << operator would not compile if defined outside the class.
- Q194615 Project Deletes Precompiled Header Created by Other Project.
- Q195376 When compiling with /Og and /Oa or /Og and /Ow, code might be incorrectly optimized due to ignoring the scale on an indirection. For example:
mov esi,dword ptr [ecx+edx*4]
mov ecx,dword ptr [ecx+edx]
was incorrectly optimized as follows:
mov esi,dword ptr [ecx+edx*4]
mov ecx,esi // error, because we were actually trying
// to load from a different address. Q199736 A compiler limitation prevented compiling code with more than 58 pairs of nested parentheses. With SP3, the compiler now supports up to 256 levels of nesting.
Q205681 The use of the ++ operator in a return statement produced access violations when code was compiled with /Od.
Q216181 In some cases, compiling with /Og generated incorrect code causing the stack frame to be copied before the stack contents were completely set up.
Q216720 When optimizing for speed, the compiler generated incorrect code for a bitwise OR operation on a Boolean type, causing the compiled application to crash, corrupt data, or otherwise misbehave.
Q216727 The compiler generated erroneous initializations for const int variables that were initialized with floating-point values.
Q216715 Bad code generation or an internal compiler error when all of these conditions apply:
- Both the left and right hand sides of the colon in a ternary (? :) operator are of class type.
- The right side is convertible to the left side by way of a user-defined conversion operator.
- The left side has no constructor that accepts an object of the class specified on the right side.
Q216716 The compiler sometimes did not create the relocation fixup for the address of the function if you declared and initialized a variable from a typedef of a pointer-to-function using a typedef for the function definition.
Q216718 In some cases, compiling with /Zi and /Yc produced a C1001 internal compiler error.
Q216722 Using a function pointer as a template class argument and then calling that function, as shown in the following example, produced compiler errors:
template < class T, int (*pfn)(T *)>
class NewClass
{
public:
int Test(T *pb)
{
return (*pfn)(pb);
}
};
int Bar( BOGUS *pb )
{
return pb->m_i;
}
void main (void)
{
BOGUS b;
b.m_i = 6;
Foo < BOGUS, &Bar > foo;
foo.Test(&b);
} Q216731 Code failed to call the destructor of an explicitly constructed anonymous temporary.
Q216747 When optimizing code with /Og and /G6, Visual C++ sometimes moved an inc, add, sub, or lea instruction across an instruction that references memory. In some cases, such as the following example, Visual C++ 6.0 did not properly update the displacement:
inc eax
mov [eax + 2*eax + 3] Q216854 Projects continuing to use environment settings after removal of the /useenv option. The workaround required deleting a registry setting. With SP3, the IDE uses environment settings only when /useenv is set.
Q217033 In rare cases, code compiled with /Og saved half of a double into memory and then loaded an FP register from it. Because half of the FP value was random data, an incorrect value resulted.
Q195377 When building a VxD with /map, the linker lost the file handle to the map file, resulting in a linker tools error ("LNK1104: Cannot open file file.map").
Q217171 The linker produced invalid images when building a VxD or driver with the /ZI (Edit and Continue) compiler option. /ZI injects special information into the image, which prevents a VxD or driver from loading. The linker has been changed to ignore the /ZI option when /VXD is specified. (This means you cannot use Edit and Continue when debugging a VxD or driver.) The linker also warns the user if it finds a section known to be invalid for a VxD.
Q217168 The linker allowed the user to build an image with a specified stack or heap commit size larger than the specified reserve size. This invalid state prevented tools such as the debugger from loading the image. If you specify a stack or heap commit size larger than the reserve size, the linker now issues a fatal error message.
Q217164 Bad code was generated when the result of an intrinsic was passed to a function that takes an int& argument.
Q217755 #import ignored TKIND_MODULE members of a type library.
Q218611 In some cases, compiling with /Og and /Ob1 generated an incorrect comparison when a loop induction variable was compared within the loop and the variable type in the comparison differed from the type in the rest of the loop.
Q218613 In some cases, when using delay-load imports on the Alpha platform, the linker produced invalid fixups and silently produced a bad image.
Visual C++ 6.0 did not support terminal-server aware applications. The SP3 release adds a new linker option, /tsaware[:no], for this purpose. The /tsaware option causes the linker to set the appropriate bit in the image optional header for a terminal-server aware application.
CRT Issues
The following CRT issue has been fixed in Service Pack 3:
- Q214661 Daylight Savings Time Bug in C Run-Time Library.
The following CRT issues have been fixed in previous service packs and are included in Service Pack 3.
Service Pack 1:
- Q193509 In a multithreaded application, one thread calling setlocale while another thread was executing strftime could result in an access violation exception.
Service Pack 2:
- MSVCRT.DLL: In Service Pack 2, MSVCRT.DLL was modified to include the Visual C++ 5.0 heap in addition to the Visual C++ 6.0 heap for better compatibility. Visual C++ 6.0 applications will continue to use the Visual C++ 6.0 heap and pre-Visual C++ 6.0 applications will use the Visual C++ 5.0 heap.
The heap-compatibility problems described in the following two Knowledge Base articles have been fixed:
- Q190536 PRB: Invalid page fault in Msvcrt.dll.
- Q194550 PRB: Freeing memory multiple times may cause an access violation.
- When installing, several of the CRT heap management files are overwritten by updated files that include the code for both the Visual C++ 6.0 heap and the Visual C++ 5.0 heap. If you need to rebuild the Visual C++ 6.0 static libraries, the Visual C++ 5.0 heap code will be included in your static library. It will not be used. The Visual C++ 5.0 heap was added to the SP2 release to prevent compatibility problems that can arise due to the problems listed earlier. If you do not want the Visual C++ 5.0 code to be included in your rebuilt static library, you should rebuild the library using the original code that was released with Visual C++ 6.0.
Updated Data Access Objects (DAO)
An updated version of DAO 3.6 is included in Visual Studio 6.0 Service Pack 3. DAO 3.6 ships with Office 2000, and the files provided in this service pack make it possible for you to develop for the updated version. DAO 3.6 can be installed along with DAO 3.5x. The SDK source files noted later in this document are not redistributable.
Upgrading to DAO 3.6 is recommended only for existing DAO applications that need access to Office 2000 format databases. For new projects, it is highly recommended you use ActiveX Data Objects (ADO) which is the successor to DAO as the Microsoft preferred data access programming model (built on the new OLE DB technology).
Changes in DAO 3.6
- Support for Unicode was added.
- Support for Unicode was added.
Support for Jet 4.0 was added.
- RepairDatabase is no longer supported. This is to match Jet 4.0. If this functionality is needed, use CompactDatabase, which will also perform a repair.
DAO 3.6 files included with Visual Studio Service Pack 3
Included in this service pack are the following files:
To use or build projects with DAO from Visual C++, build the LIB files (see the following instructions). These files can be found on the Visual Studio Service Pack 3 CD in the \support directory or in your extraction folder if you downloaded the service pack from the Internet:
DAO SDK Headers DAO SDK Source
--------------------------------------
_dbdao.h dbdaouid.cpp
dbdaoerr.h resource.h
dbdaoid.h version.rc
dbdaoint.h stdafx.h
version.usr dbdao.dsp
daogetrw.h Dbdao.dsw
VERSTAMP.H dbdao.mak
VERSION.H dbdao.rc
Dbdao.h Dbdao.cpp
To Build the DAO Libraries
- Copy the DAO SDK Headers and Source files to a directory on a computer running Visual Studio.
- In Visual C++, open DBDAO.DSW.
- From the Build menu, choose Configurations, and select the type of library you want to use.
- From the Build menu, choose Build<dll name>. You can build multiple dlls at the same time by choosing Batch Build from the Build menu.
- Compile your DAO application as usual.
Distributing DAO 3.6
To distribute an application that accesses DAO 3.6 through the DAO SDK classes, install the appropriate DAO36x.DLL for your application.
Debugger Issues
The following debugger issues have been fixed:
- Q198839 Possible failure of an asynchronous break on a multiprocessor computer when the breakpoint has been encountered more than once.
- Q217369 The debugger would crash, hang, or emit low resource warnings when remotely debugging a program with frequent calls to OutputDebugString.
- Q217437 The debugger would crash if two symbols in the debug information had the same hash value.
- Q218612 Remote debugging did not work on the Alpha platform.
IDE Issues
The following Integrated Development Environment (IDE) issues have been fixed:
Microsoft Foundation Classes (MFC) Issues
Installing Service Pack 3 on Windows 2000 Beta 3
For information about installing Visual Studio 6.0 Service Pack 3 on Windows 2000 Beta 3, see Installing Service Pack 3 on Windows 2000.
Using Access 2000 Databases with MFC 6.0.
MFC 6.0 has the ability to use Microsoft Access 2000 databases. To engage this support in your application, you must enable DAO 3.6 by:
MFC Fixes
The following MFC issues have been fixed:
- Q190518 MFC AppWizard associated incorrect images with toolbar buttons for SDI applications that did not use the document/view architecture.
- Q193101 The socket thread state was not initialized in multithreaded, statically linked MFC applications. If one of the threads in an application called AfxSocketInit, further calls to the same function from other threads failed to set the socket thread state for that thread.
- Q194300 Asserts occurred when creating a dialog box in an MFC regular DLL.
- Q197448 Calling CString::Format on a string bound to an MFC ODBC field containing a double sometimes caused the memory to be reallocated, making the binding inconsistent for parameters and output columns.
- Q216850 MFC AppWizard applications with no document/view architecture, initial status bar, or docking toolbar would crash on an assert statement.
- Q217208 CMenu::GetMenuString did not properly handle strings over 256 bytes, resulting in possible corruption.
- Q217201 A bug in CControlBar::WindowProc caused an access violation when TOOLTIPTEXT.lpszText was the ID for a string resource or was unused. This happened when the identifier of a string resource was copied to the lpszText structure member, and the handle of the instance containing the resource was copied to the hinst structure member.
- Q217216 CDaoDatabase::CreateRelation called Release beyond the reference count, causing an assertion.
- Q225140 MFC applications could experience problems due to the failure of COleDateTime::operator= to properly account for dates after the year 1999. This problem is fixed by changes to MFC40.DLL and MFC40u.DLL. MFC applications that use these DLLs can use the fix without being recompiled. Only applications built with Visual C++ 4.0 or 4.1 require this updated DLL.
Service Pack 1
The following MFC issues were fixed in Service Pack 1 and are included in Service Pack 3:
- Q192942 ActiveX controls that resize themselves in response to being moved would cause a stack overflow.
- Q193099 CDialog::Create did not return FALSE when dialog creation failed.
- Q193102 Inappropriate assertions were raised in debug builds in some Automation routing situations involving nested activations.
- Q193100 Deserializing an ANSI string in a UNICODE release build of MFC caused an access violation.
- Q193272 MFC DLLs created with Visual C++ 6.0 did not call CPrintDlg::OnInitDialog, causing programs that depended on this initialization routine to fail.
Multilanguage Issues
The following multilanguage and language coexistence issues have been fixed:
- A problem in Devshl.dll that prevented Microsoft® Visual Fortran users from doing command-line builds.
- Corruption of the string table causing inability to find strings for additional languages in a resource when an application calls from one programming language to another.
OLE DB Consumer Issues
The following OLE DB Consumer issues have been fixed:
- Q191738 When using CArrayRowset, storing more than one page (4 KB) of data in the buffer or trying to get a nonexistent record caused an infinite loop. With SP3, storing more than 4 KB of data works properly, and trying to get a nonexistent record causes an access violation (as intended) which the user can catch.
- Q217218 OLE DB Templates used DBFILETIME instead of FILETIME.
- Q218929 UUID.LIB contained a bad definition for the IViewFilter interface. IViewFilter is an OLE DB 1.5 interface that is not used by the OLE DB Templates. However, this definition could cause problems for OLE DB consumers trying to use the interface directly.
- Q223180 FIX: DB_E_ERRORSOCCURRED From Jet Provider During OpenDataSource.
OLE DB Provider Issues
The following OLE DB Provider issues have been fixed:
- Q201387 CTABLESRow did not have a TABLE_PROPID column. This has been added, so OLE DB Templates providers will not fail when a consumer requests this column.
- Q217181 The PROVIDER_COLUMN_ENTRY macro set the DBID.eKind value to zero (DBKIND_GUID_NAME) instead of 2 (DBKIND_NAME). This could cause problems when an OLE DB Templates provider is used with SQL Server 7.0.
- Q217183 IDBPropertiesImpl::GetPropertyInfo did not return the correct values when the cPropertyIDSets parameter was zero. This could result in undefined consumer behavior, including weird error messages, crashes, or lock ups.
- Q217185 IRowsetImpl::GetData returned a nonzero value for the Length even if the data was null. GetData now correctly returns zero for Length if the data is null.
- Q217186 The OLE DB Templates did not set the CATALOG and SCHEMA columns for all schema rowsets to null, as required for OLE DB providers that do not implement theIDBInfo interface.
- Q217187 A failure in InternalCreateSchemaRowset caused an access violation.
- Q217188 To better conform to the OLE DB specification, the names of columns in the CCOLUMNSRow Provider Column Map have changed by the addition of an underscore. For example, TableCatalog has become TABLE_CATALOG. This prevents OLE DB Templates providers from failing when a consumer requests one of these columns.
A consumer who queried for information about Initialization properties (information about userid, password, and so on) from the provider would receive incorrect information, leading to possible crashes or hanging.
Visual SourceSafe Integration Issues
The following Visual SourceSafe integration issue haS been fixed:
- Q206665 The Get Latest Version command did not reload all projects that had been changed. If more than one workspace was open on a computer and the project settings were changed in each project on another computer, then the project settings were not updated for all projects. If more than two workspaces were changed, then not all were refreshed.
Known Issues
This section describes current issues for the Visual C++ 6.0 SP3 release. For issues that have been fixed, see the sections preceding this one.
OLE DB/ODBC Issues
- MFC EXE Appwizard fails to show the worksheets in an Excel spreadsheet when specifying an ODBC connection.
When specifying an Excel ODBC connection, the MFC EXE Appwizard shows an empty list and asks the user to select a table. To work around this issue, use an OLE DB Provider for ODBC drivers connection to the Excel spreadsheet instead.
- MFC EXE Appwizard generated application fails to open recordset on an Access table through the OLE DB provider for ODBC drivers.
When an MFC EXE Appwizard-generated application that connects to an Access table through the OLE DB provider for ODBC drivers is executed, it displays a "Recordset failed to open" message. There is no current workaround for this problem. It will be fixed in a future release of the Microsoft Data Access Components (MDAC).
- Microsoft OLE DB provider for SQL server fails to open a table without a primary key.
The Microsoft OLE DB provider for SQL server cannot open a table that does not have a primary key defined. To work around this issue, access the table using the Microsoft OLE DB provider for ODBC drivers and a SQL server ODBC driver.
Using MDAC 2.1 with Visual Studio SP3
Setup does not install the MDAC 2.1 library and header files. Visual Studio Service Pack 3 has been tested with the MDAC 2.0 headers and libraries against the MDAC 2.1 binaries. If you need to use specific MDAC 2.1 interfaces, you will need to install the headers and libraries manually. For information on installing the library and header files, see Installing Microsoft Data Access Components 2.1.
Windows 2000 Issues
- Debugger May Crash on Windows 2000 Beta 3.
A late-breaking issue may prevent the debugging of Visual C++ applications on Windows 2000 Beta 3. You can compile your applications.
- Debugger may not report exceptions correctly on Windows 2000.
On some releases of Windows 2000, the debugger will not report certain types of exceptions correctly. For example, sometimes the debugger will let the exception pass through to the CRT, where an abort message will be reported. This Windows 2000 issue is expected to be fixed in a future release.
- SDK headers and libraries for Internet Explorer 5 and Windows 2000 not included in Visual Studio Service Pack 3.
Visual Studio Service Pack 3 does not include the latest SDK headers and libraries for Internet Explorer 5 or Windows 2000. The updated headers and libraries for Internet Explorer 5 are available from the Microsoft Web and Internet Samples Download Area. For future Windows 2000 SDK updates, see the MSDN SDK Web page.
- MFC AppWizard generates incorrect column map when using OLE DB ODBC provider and Access
If you generate an MFC database application using OLE DB and you use the OLE DB ODBC provider on an Access database, the AppWizard might generate a column map with incorrect ordinals in the Set.h file. The workaround is to reset the ordinals starting at 1. For example:
BEGIN_COLUMN_MAP(CMyTable)
COLUMN_ENTRY_TYPE(2, DBTYPE_I4, m_id)
COLUMN_ENTRY_TYPE(3, DBTYPE_STR, m_field1)
COLUMN_ENTRY_TYPE(4, DBTYPE_STR, m_field2)
END_COLUMN_MAP()
should be:
BEGIN_COLUMN_MAP(CMyTable)
COLUMN_ENTRY_TYPE(1, DBTYPE_I4, m_id)
COLUMN_ENTRY_TYPE(2, DBTYPE_STR, m_field1)
COLUMN_ENTRY_TYPE(3, DBTYPE_STR, m_field2)
END_COLUMN_MAP()
REFERENCES
For more information about the Visual Studio 6.0 SP3 readme, please see the following articles in the Microsoft Knowledge Base:
Q230722 Visual Studio 6.0 SP3 Readme Part 1 - Overview and Installation
Q230724 Visual Studio 6.0 SP3 Readme Part 2 - Visual Studio
Q230726 Visual Studio 6.0 SP3 Readme Part 3 - Visual Basic
Q230729 Visual Studio 6.0 SP3 Readme Part 5 - Visual FoxPro
Q230730 Visual Studio 6.0 SP3 Readme Part 6 - Visual InterDev
Q230731 Visual Studio 6.0 SP3 Readme Part 7 - Visual J++
Q230732 Visual Studio 6.0 SP3 Readme Part 8 - Visual SourceSafe
Q230733 Visual Studio 6.0 SP3 Readme Part 9 - File Versions
Additional query words:
Keywords : kbreadme kbservicepack kbVS600sp2 kbVS600SP1 kbVS600sp3
Version : WINDOWS:6.0 SP3
Platform : WINDOWS
Issue type : kbinfo
|