FIX: Link Paste Update Causes ASSERT in AFXWIN1.INL (130867)
The information in this article applies to:
- The Microsoft Foundation Classes (MFC), when used with:
- Microsoft Visual C++, 32-bit Editions 2.0
This article was previously published under Q130867 SYMPTOMS
Some containers respond to change notifications in Paste Link objects by
calling GetData() on the linked object with a pointer to a valid
DVTARGETDEVICE. This is usually a printer device or something other than
the display context, which can be created by the server. In the case where
the container is a 16-bit Windows-based application, this may cause an
assertion in AFXWIN1.INL line 457.
CAUSE
In the case of a 16-bit Windows-based container application, MFCANS32.DLL
attempts to translate the fields of the 16-bit DVTARGETDEVICE structure to
32-bit equivalents and pass the new structure on to the 32-bit MFC-based
server application. In doing this, it uses a copy of the DVTARGETDEVICE
structure containing mis-ordered fields. Specifically, the
tdDeviceNameOffset and the tdDriverNameOffset fields are reversed in order.
This causes any server that attempts to use the DVTARGETDEVICE to create a
valid device context to fail when it uses these fields to call
::CreateDC().
In the MSVC20\MFC\SRC\OLEMISC.CPP module, the utility function
_AfxOleCreateDC() does not check the return code from ::CreateDC() and
returns an invalid HDC as a result. Later, that handle is attached to a CDC
object. When AFXWIN1.INL's CDC::GetDeviceCaps() function is called, it
validates the HDC member that was attached, and that is where the assertion
occurs. Depending on the circumstances and container application being
used, the symptom may be different.
STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article. This bug was corrected in Microsoft
Visual C++, 32-bit Edition, version 2.1 for x86 platforms.
Modification Type: | Major | Last Reviewed: | 10/24/2003 |
---|
Keywords: | kbbug kbfix KB130867 |
---|
|