This example demonstrates how to check for the presence or absence of optional arguments.
// Function: MyDaysInFeb
// Returns: LPXLOPER
// Description: Return the number of days in February in a year
//{{XLP_SRC(MyDaysInFeb)
// NOTE - the FunctionWizard will add and remove mapping code here.
// DO NOT EDIT what you see in these blocks of generated code!
IMPLEMENT_XLLFN2(MyDaysInFeb, "RP", "MyDaysInFeb", "Year",
"User Defined", "Return the number of days in February in a"
" year", "Optional year as a number (Default = 1997)\000",
"\0", 1)
extern "C" __declspec( dllexport )
LPXLOPER MyDaysInFeb(const COper* lpopYear)
{
CXlOper xloResult;
//}}XLP_SRC
unsigned short usYear = 0;
// If argument is missing, use default year value
if ( lpopYear->IsMissing() )
usYear = 1997;
// If argument is a double, use it
else if ( lpopYear->IsDouble() )
{
double dYear = lpopYear->ToDouble();
if ( dYear < 1904.0 || dYear > 2099.0 )
xloResult = xlerrValue;
else
usYear = (unsigned short)dYear;
}
// Any other data type is unacceptable
else
xloResult = xlerrValue;
// Get result if no error
if ( usYear > 0 )
xloResult = (double)((usYear % 4 != 0) ? 28 : 29);
return xloResult.Ret();
}