Old iostream Library
The old iostream library has been removed from Visual C++ in this release. Use the Standard C++ Library for iostream programming.
C Run-Time Library
- The documentation for the C Run-Time Library now includes information for .NET Framework equivalents. For more information, see Run-Time Routines and .NET Framework Equivalents.
- _get_heap_handle has been added.
- The _CRTDBG_CHECK_DEFAULT_DF macro, used in _CrtSetDbgFlag is now defined to zero, meaning that no heap checking is done by default.
- swprintf now is compatible with the ISO C standard (C++ only).
- vswprintf now has a C++-only form that lets you specify the maximum number of characters to store.
- For several of the multibyte functions, such as _mbsset, the CRT was not always detecting invalid multibyte strings, where a lead byte would be followed by a null trail byte. The CRT now has more checks for invalid multibyte characters, where a lead byte is followed by a null trail byte.
- _set_purecall_handler has been added.
- Previously, when a process loaded a DLL that statically referenced the CRT library, floating-point precision would be initialized to 53 bits. In Visual C++ .NET 2003, floating-point precision is not initialized in this scenario. This may cause a breaking change in some existing applications that relied on the CRT to initialize floating-point precision.
- The CRT now has float and double forms for all math functions. These new functions are only callable from C++.
Standard C++ Library
In previous releases, input and output of characters to a stream may have resulted in character or unsigned short values being stored if wchar_t was not defined as a native type. Now, an unsigned short is always treated as a character.
Information about Thread Safety in the Standard C++ Library is now available.
In Visual C++ .NET 2003, members of the <hash_map> and <hash_set> header files are no longer in the std namespace, but rather have been moved into the stdext namespace. See The stdext Namespace for more information.
The Standard C++ Library has been updated to take advantage of the enhanced Visual C++ compiler support for the C++ standard. For example, the Standard C++ Library implementation shipping in Visual C++ now makes use of partial template specialization.
- In Visual Studio .NET 2003, the MIDL compiler has a default setting of /robust, which causes projects running under Windows NT 4 to stop responding.
To change the MIDL compiler flag to /no_robust
- Right-click your project, and on the shortcut menu, click Properties.
The Project Properties dialog box appears.
- In the left pane, click MIDL, and then select Command Line.
- Enter /no_robust in the Additional Options text box.
- The ATL string conversion macro USES_CONVERSION has been superseded by USES_CONVERSION_EX. It will try to allocate space on the stack. If there is no available room on the stack, it will try the heap. If there is no room on the heap, it will return NULL. USES_CONVERSION_EX has an extra parameter (threshold) that you can use: if the request is larger than the size of threshold, the macro will go to the heap directly.
- _alloca has been superseded by _atl_safe_alloca.
- The class CSocketAddr Class has been added to provide protocol independent methods for dealing with both IPv6 and IPv4 addresses.
- When building a project that outputs an executable, ATL automatically adds quotation marks around the path name created at run time with the %MODULE% registrar script parameter. If you do not want the path name to include the quotation marks, use the new %MODULE_RAW% parameter instead.
When building a project that outputs a DLL, ATL will not add quotation marks to the path name if %MODULE% or %MODULE_RAW% is used.
- Connection maps are no longer compacted when a connection point is deleted; instead, the deleted connection point is replaced with a NULL. Therefore, you should check for NULL when using CConnectionPoint::GetConnections or CConnectionPoint::GetNextConnection.
- The following functions may now throw exceptions: CSimpleString::FreeExtra, CSimpleString::GetAt, CSimpleString::operator , CSimpleString::ReleaseBuffer, CSimpleString::ReleaseBufferSetLength, CStrBuf::SetLength, and some CTime::CTime constructors.
- The behaviors of AfxIsValidAddress and AfxIsValidString have changed. In non-debug builds, both functions just test for a non-NULL argument.
- CHeaderCtrl::GetOrderArray no longer has a default second parameter; -1 is no longer a valid value for the second parameter.
- CAsyncSocket has new IPv6-aware members: GetPeerNameEx, GetSockNameEx, ReceiveFromEx, and SendToEx.
ATL and MFC
- The CImage class now keeps track of the number of objects created. Whenever the count goes to 0, the function GdiplusShutdown is automatically called to release resources used by GDI+. This prevents resources from not being freed when CImage objects are created by a DLL.
- The MFC CString class has been rewritten as a template class, CStringT. This allows you to use CString in ATL projects without linking in the larger MFC static library or DLL.
Note This release fixes the problem described in the Knowledge Base article, "Linking Errors When You Import CString-Derived Classes" (Q309801). You can find Knowledge Base articles on the MSDN Library CD-ROM or at http://support.microsoft.com/support/. If you encountered linker errors when exporting a CString-derived class from an MFC extension DLL in Visual C++ .NET 2002 and have applied the workaround described in this article, you should remove the workaround code, because the problem has been fixed in Visual C++ .NET 2003.
- CStrBufT and CSimpleStringT now have an additional template parameter that tells you whether CString is to be used from the MFC DLL. Use the typedef found in the CStringT or CSimpleStringT class in atlsimplstr.h (rather than the global typedef).
- In an XML Web service created with ATL Server, the default action is to validate SOAP parameters after they are read. To switch off the validation, define the macro _ATL_SOAP_NO_PARAMETER_VALIDATIONS.
- SPROXY.EXE can now process a .discomap file or a .wsdl file. Specify the new
/wsdloption when you use a .wsdl file as the input:
sproxy /wsdl <input_location>
<input_location>is the path of the .wsdl file to use.
SPROXY.EXE can now process a results.discomap file:
Note that the .discomap file contains a link to a local copy of the .wsdl file and also uses a local copy of the schema file.