PRB: "ASSERTION FAILED" with Excel 5.0 Automation ClassesLast reviewed: July 22, 1997Article ID: Q114372 |
1.50
WINDOWS
kbprg kbprb
The information in this article applies to:
SYMPTOMSWhen calling methods of Automation objects for Microsoft Excel 5.0, you may receive the following message:
ASSERTION FAILED oledisp2.cpp, line 352! CAUSEClassWizard creates the COleDispatchDriver-derived classes for use with Excel 5.0 by reading the Excel type library, XLEN50.OLB. The information in that type library states that some parameters passed to, and return values received from IDispatch::Invoke are of type VARIANT. These VARIANTs are unions of several data types with a VARTYPE member specifying the actual contained data. MFC 2.5 source file OLEDISP2.CPP contains the following code at line 352:
ASSERT(vtRet == vaResult.vt);This assertion checks the VARTYPE member to determine what is actually contained in the VARIANT. The type library information is saying that this should be VT_VARIANT, while the actual returned value is different. Refer to the header file VARIANT.H in your include directory for the possible data types and their VARTYPE specifiers.
RESOLUTIONThe intent of this ASSERT is to ensure strong type checking of arguments used in IDispatch::Invoke calls to the Automation server. There are several solutions:
In Visual C++ for Windows versions 1.51 and later and Visual C++ 32-bit edition, MFC has been modified as described in the second solution above. If you wish to perform strong type checking on VARIANT arguments to an automation method, place an assertion in your COleDispatchDriver derived class member function.
Sample Code
// Machine generated IDispatch driver class(es) created with // ClassWizard. // This is the function generated by ClassWizardVARIANT Worksheet::Application() { VARIANT result; InvokeHelper(0x94,DISPATCH_METHOD,VT_VARIANT,(void*)&result,NULL); return result;}
// This is the same function with change #1LPDISPATCH Worksheet::Application() { LPDISPATCH lpDispatch; InvokeHelper(0x94, DISPATCH_METHOD, VT_DISPATCH, (void*)&lpDispatch, NULL); return lpDispatch;}
// This is the same function with change #2VARIANT Worksheet::Application() { VARIANT result; InvokeHelper(0x94,DISPATCH_METHOD,VT_VARIANT,(void*)&result,NULL); ASSERT(result.vt == VT_DISPATCH); return result.;}
|
Additional reference words: 1.50 2.50 automation displatch ole oledisp2
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |