This example shows how to return an array of mixed types from an add-in function.
// Function: MyMonthsInYear
// Returns: LPXLOPER
// Description: Return array describing each month in a given year
//{{XLP_SRC(MyMonthsInYear)
// NOTE - the FunctionWizard will add and remove mapping code here.
// DO NOT EDIT what you see in these blocks of generated code!
IMPLEMENT_XLLFN2(MyMonthsInYear, "RH", "MyMonthsInYear", "Year",
"User Defined", "Return array describing each month in a"
" given year", "Year as a number (eg 2005)\000", "\0", 1)
extern "C" __declspec( dllexport )
LPXLOPER MyMonthsInYear(USHORT usYear)
{
CXlOper xloResult;
//}}XLP_SRC
if ( usYear < 1901 || usYear > 2099 )
xloResult = xlerrValue;
else
{
static LPCSTR apszMonths[12] = {
"Jan", "Feb", "Mar", "Apr",
"May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec"
};
// Allocate the result array
xloResult.AllocArray(12, 3);
// Fill each row
for ( unsigned short i = 0; i < 12; i++ )
{
// Put month number in first column
xloResult.Cell(i, 0) = (double)(i + 1);
// Put short month name in second column
xloResult.Cell(i, 1) = apszMonths[i];
// Put length of month in third column
int cDays;
switch ( i + 1 ) {
case 2:
cDays = (usYear % 4 != 0) ? 28 : 29;
break;
case 4: case 6: case 9: case 11:
cDays = 30;
break;
default:
cDays = 31;
break;
}
xloResult.Cell(i, 2) = (double)cDays;
}
}
return xloResult.Ret();
}