When you return to your source code, you will see that some of the generated code has been changed.
CXlOper* HISTVOL_Impl(CXlOper& xloResult, const CXlOper* Prices_op, doubleDaysPerYear) { // Input buffers std::vector<double> Prices; // Validate and translate inputs XlReadVector(*Prices_op, Prices, L"Prices", XLA_TRUNC_ONEMPTY| XLA_TRUNC_ONBLANK); // End of generated code //}}XLP_SRC try { xloResult = CalcHistVol(Prices, 250.0); } catch(const char*) { xloResult = xlerrNum; } return xloResult.Ret(); }
Notice that your code outside the //{{XLP_SRC delimiters is unchanged; all the changes occur within the delimiters, in the portion of the code that is "owned" by the XLL+ Function Wizard.
Make one more change to the function, to pass the new argument to our CalcHistVol(), as shown below:
CXlOper* HISTVOL_Impl(CXlOper& xloResult, const CXlOper* Prices_op, double DaysPerYear) { ... try { xloResult = CalcHistVol(Prices, DaysPerYear); } catch(const char*) { xloResult = xlerrNum; } return xloResult.Ret(); }
The new release of the function is now complete, and ready for building and testing.
Existing users of the function will be inconvenienced by this change, since they will now get a #NUM! error in all their existing spreadsheets.
In the next chapter, we will revisit this function, and replace DaysPerYear with an optional argument, which, if omitted, will be defaulted to 250. That way, the existing users are unaffected, and new users can choose to specify the days per year or to omit it, as they prefer.