The information in this article applies to:
SYMPTOMSDDESPY GP faults when a DDEML server application's dynamic data exchange (DDE) callback function returns CBR_BLOCK from a transaction of XCLASS_DATA class. CAUSEExpecting to always obtain a valid data handle from transactions of XCLASS_DATA class, DDESPY calls DdeAccessData() on the hData it receives in an attempt to dump the data to its output window. Internally, DDEML's DdeAccessData() translates to a GlobalLock() call. Consequently, a return value of CBR_BLOCK (defined in WINDOWS.H as -1) would mean calling GlobalLock() on an invalid hData == -1, and thus results in a general protection (GP) fault. STATUSMicrosoft has confirmed this to be a bug in the version of DDESPY that comes with the Windows 3.1 SDK. With the improved parameter validation in Windows NT, this problem should be corrected in the Windows NT version. MORE INFORMATION
In DDEML, transactions of XCLASS_DATA class are typically expected to
return a data handle. (Among the DDEML transactions of this class are
XTYP_REQUEST, XTYP_ADVREQ, and XTYP_WILDCONNECT.) However, in
situations where such transactions require lengthy processing (such as
a server gathering data from a network), thereby making it impossible
to return a data handle immediately, an application may choose to
return CBR_BLOCK from its DDE callback function. This allows the
server application to gather data "asynchronously," as DDEML queues up
further transactions on the current conversation.
DDEML and CBR_BLOCK Additional query words: 3.10 GPF gp-fault buglist3.10
Keywords : |
Last Reviewed: November 4, 1999 © 2000 Microsoft Corporation. All rights reserved. Terms of Use. |