XLL+ Class Library

COper::ColToVector() & RowToVector() Example

//{{XLP_SRC(CalcProducts)
    // NOTE - the FunctionWizard will add and remove mapping code here.
    //    DO NOT EDIT what you see in these blocks of generated code!
IMPLEMENT_XLLFN2(CalcProducts, "RPP", "CalcProducts", "Col,Row",
    "User Defined", "Calculate the products of the members of"
    " two series", "Column of X values\000Row of Y values\000", 
    "\0\0", 1)

extern "C" __declspec( dllexport )
LPXLOPER CalcProducts(const COper* lpopX, const COper* lpopY)
{
    CXlOper xloResult;
//}}XLP_SRC

    BOOL bOk = TRUE;
    CString strError;

    std::vector<double> vecX;
    if ( bOk && !(bOk = lpopX->ColToVector(vecX, &strError)) )
        strError = "Error in X: " + strError;

    std::vector<double> vecY;
    if ( bOk && !(bOk = lpopY->RowToVector(vecY, &strError)) )
        strError = "Error in Y: " + strError;

    if ( !bOk )
    {
        xloResult = strError;
        return xloResult.Ret();
    }

    xlp::matrix<double> mat;
    mat.resize(vecX.size(), vecY.size());
    USHORT i, j;
    for ( i = 0; i < vecX.size(); i++ )
        for ( j = 0; j < vecY.size(); j++ )
            mat.at(i, j) = vecX[i] * vecY[j];

    xloResult = mat;
    return xloResult.Ret();
}

Uses

COper::ColToVector | COper::RowToVector | matrix<T> | matrix<T>::resize | matrix<T>::at