ATL and MFC changes and fixes in Visual Studio 2013

ATL and MFC changes and fixes in Visual Studio 2013

Rate This
  • Comments 27

Hello, I’m Pat Brenner, a developer on the Visual C++ Libraries team.  In this blog post I would like to share with you the changes that we’ve made in ATL and MFC for Visual Studio 2013.

One of the major changes we made was to eliminate the ATL DLL altogether.  All ATL code is now static, either in the header files or in the ATL static library.  We also reduced the amount of code in the ATL static library substantially, so there are no longer multiple static libraries for debug/release mode or Unicode/ANSI character set.  There is only one ATL static library that is common to all configurations. 

The changes to ATL also included the elimination of the ATL/MFC Trace Tool and the simplification of the tracing mechanism.  The TRACE macros now essentially boil down to OutputDebugString, and there is no external controller of tracing level (like the trace tool provided)—the tracing level is set in the application itself.  This does cause source-breaking changes in some uses of the ATL::CTraceCategory class, which will require changes in source code when migrating to Visual Studio 2013.

The major change we made in MFC was the deprecation of MBCS support (see more information in this separate blog post).

In addition, we fixed about 105 bugs in MFC and about 60 bugs in ATL.  About one-fourth of these bugs (in both libraries) were reported by customers.

Though I cannot provide a complete list of the bugs in our internal bug database, here is a list of the bugs that were reported by customers through our Connect site that have been fixed in ATL and MFC for Visual Studio 2013 RTM. Click on any Connect bug number to see more information about that bug.  Note that most of these bugs were fixed for the Preview release as well.

Connect #

Bug Title

710163

atlbase.h disables no longer existing C4217 warning

714790

Useless line of code in AtlSafeRealloc()

714791

AtlSafeRealloc() treats failures inconsistently and this leads to memory leaks

714840

CAtlServiceModuleT::LogEventEx() contains a useless check

714802

Suspicious error handling code in CAtlExeModuleT::StartMonitor()

742895

CComApartment::Apartment() leaks objects on edge cases

736213

ATL::CComSafeArray::operator[] ambiguity

764800

wrong/missing sal annotations on consumer oledb macros

750369

Breaking change in how the ATL OLE DB CCommand::Execute method behaves

774871

Certification fails for Windows Store App with ATL-based library

785396

Uninstalling VS2012 Update 2 and repair of VS results in ATL files missing.

789669

ATL CRBMap::Lookup code analysis markup issue

790309

VC++11 regression: error C2338: db_command using v110 toolset

745790

Static MFC executables produced by Visual Studio 2012 RC are huge

750838

MFC loads DLLs using LoadLibraryEx with flag only supported on Windows8

757588

CMFCRibbonBar::AddToTabs removes a wrong button from the m_arButtons array

763947

EndDialog in OnInitDialog reopen Dialog

763517

IMPLEMENT_DYNAMIC produces compile error for statically linked MFC projects

768378

CMFCTabCtrl bug

769093

MFC Edit Browse box not showing browse button.

772859

Calling EndDialog() within OnInitDialog() causes the dialog to be displayed twice.

750859

Visual Studio 11 Beta - bug running .exe in XP service pack 3

763474

Errors detected in the Visual C++ 2012 libraries

760371

LocalFree called twice in CDatabase (MFC 11)

710858

MFC OLE-Server doesn't seem to support the new style MFC  Toolbars

773463

Attempting to use DrawStatusText after including afxwin.h  results in link error

768257

Probems with CRecordset::GetFieldValue(short nIndex,  CDBVariant& varValue) in VS2012

772549

x64 MFC Macro Bug - ON_WM_POWERBROADCAST() /   CWnd::OnPowerBroadcast

773448

CHttpFile::QueryInfo() returns "corrupted" CStrings with invalid lengths.

778201

Missing MFC Functions

777604

CWnd::GetScrollLimit returns 1 if scrolling is deactivated

781179

CMFCPopupMenu crash when you click outside while submenu still open

781379

CMFCShellTreeCtrl fails to handle some UNC pathnames correctly

781257

MFC - CMFCTabCtrl - when style is STYLE_3D_VS2005 and SetActiveTabBoldFont() is set

789970

Unpaired pragma warning push/pop in afxwin.h in Release build

790246

MFC: bad hard typecast in CMFCToolBarMenuButton::CompareWith

790975

HTTP_QUERY_FLAG_REQUEST_HEADERS on CHttpFile::QueryInfo()   asserts wrongly

792003

CMFCShellListCtrl::OnContextMenu 'Delete' context menu handler does not work

 

I hope you find this information useful.  Please let us know if you have any questions.

Pat Brenner, Visual C++ Libraries Development Team

  • Can Visual C++ team add Quad precision type to the language?  GCC compiler has __float128.  Intel has _Quad.  I know most people do not use floating precision beyond double.  But some people do.  It should not be a big addition but can be very useful.

    Thanks.

  • Can Visual C++ team add Quad precision type to the language?  GCC compiler has __float128.  Intel has _Quad.  I know most people do not use floating precision beyond double.  But some people do.  It should not be a big addition but can be very useful.

    Thanks.

  • @ Moritz Leutenecker:

    MFC can't be used for for Windows Store apps because it uses too many APIs that are banned for store usage.  In order to allow MFC usage in your scenario we would probably have to break MFC into multiple DLLs, which would be a prohibitive amount of work.

    @ Tom Kirby-Green:

    Tom, can you be more specific about the bugs you've encountered in tabbed documents and ribbon classes?  As far as I know we have fixed all the bugs we know about in those areas.

    @pwc2:

    We do make every effort to make all the C++ library headers (CRT, ATL, and MFC) clean for code analysis.  I'm sure we have fixed the warnings you report (since they are in Visual Studio 11.0 versions of the headers).  We are sometimes caught by late changes in the Windows SDK headers that we do not have a chance to respond to.

    @xiangqianyong:

    Can you report the bug you are experiencing via the Connect system at connect.microsoft.com/VisualStudio ?  That would give us a more concrete report to work from.

    @Yogurt:

    I will report the bug you mentioned to the Windows team.  They own that header so we on the Visual Studio team do not have the opportunity to fix it.

  • connect.microsoft.com/.../750838

    "MFC loads DLLs using LoadLibraryEx with flag only supported on Windows8"

    That link is currently broken

  • I wish to use the new Visual Studio with an old project.  All went smoothly till the linking.

    Then it turned out that two libraries defined in afx.h were missing:

    mfc120.lib  (for the DLL version)

    nafxcw.lib  (for the static version)

    Do you plan to include these libraries into the final version?

    PS: The unicode versions of these libraries appear to be present.  However my software contains thousands of lines which I do not wish to modify for a unicode version.

  • Since my previous post  I found the missing nafxcw.lib and nafxcw.lib libraries

    in the MBCS version, using a link from an other blog of Pat Brenner:

    www.microsoft.com/.../details.aspx

    Thank you, Pat.

  • Will there be a Visual Studio 2012 update where all the MFC bugs are fixed as well?

  • I think I have found an MFC bug in VS2013RC when using the dialog editor

    (see connect.microsoft.com/.../mfc-project-rc-file-getting-corrupted-when-using-vs-2013-rc)

  • How does a double free heap corruption bug (760371) not rate as "must fix as soon as possible" by the Visual C++ Libraries team? Update's 2 and 3 were both released well after GüntherH posted the exact reason for it occurring. I could at least forgive it not being included in Update 1 (just barely, as nearly three months elapsed from bug report time to Update 1 being released).

  • Re: MBCS support (I can't comment on the other post).

    It occurs to me that most of the people affected by this are probably not going to spend time proactively looking at Microsoft's road map or read these blogs, so hopefully your research took that into account.

    Downloading the library separately is a reasonable thing to have to do. Seems like you could even have the installer only download libraries that we are interested in. Download size seems like a flimsy reason to drop that support.

    Why don't we switch to Unicode? We have no compelling reason to do so. Our program began under DOS, and moved to Windows. Our target market is English speaking. If we were starting from scratch, Unicode would make sense. At this point, we have no internal reason to make the transition, which would create pain for our customers and a lot of work for us, just to tread water. So the only reason we have to even consider it is that you are removing support for this at some point in the future.

    Maybe some links on how to write code from now on that would be easy to switch to Unicode, so we don't keep digging ourselves into a deeper hole when you cut us off.

  • I just rebuilt my app which looks fine in VS2010 and all the dialogs have a strange gap between the pane of the dialog and the border of the dialog when built with VS2013.

    Any changes to MFC that would account for that?

  • Just answering my question above.

    I changed the toolset to v120_xp and it resolved my issue with the blank borders in my custom drawn dialogs. I think it is because by default visual studio 2013 uses the 8.1 windows SDK- windows 7 and above seems to have fatter borders on the windows.

Page 2 of 2 (27 items) 12