返回多维数组以从c ++ xll中获得优秀

时间:2015-05-29 15:48:27

标签: c++ arrays export-to-excel xll

当我尝试传递1维数组时,这很好用

__declspec(dllexport) LPXLOPER TestArray()
{
    XLOPER xlValues[2];
    xlValues[0].xltype = xltypeNum;
    xlValues[1].xltype = xltypeNum;
    xlValues[0].val.num = 123;
    xlValues[1].val.num = 345;

    static XLOPER xlArray;
    xlArray.xltype = xltypeMulti | xlbitDLLFree;
    xlArray.val.array.rows = 2;
    xlArray.val.array.columns = 1;
    xlArray.val.array.lparray = &xlValues[0];
    return (LPXLOPER)&xlArray;
}

但是当我尝试传递多维数组时,该函数返回#NUM!

__declspec(dllexport) LPXLOPER TestArray1()
{
    XLOPER xlValues[2][2];
    xlValues[0][0].xltype = xltypeNum;
    xlValues[0][1].xltype = xltypeNum;
    xlValues[1][0].xltype = xltypeNum;
    xlValues[1][1].xltype = xltypeNum;

    xlValues[0][0].val.num = 123;
    xlValues[0][1].val.num = 456;
    xlValues[1][0].val.num = 345;
    xlValues[1][1].val.num = 43456;

    static XLOPER xlArray;
    xlArray.xltype = xltypeMulti | xlbitDLLFree;
    xlArray.val.array.rows = 2;
    xlArray.val.array.columns = 2;
    xlArray.val.array.lparray = &xlValues[0][0];
    return (LPXLOPER)&xlArray;
}

有什么想法吗?提前谢谢!!

1 个答案:

答案 0 :(得分:1)

在TestArray()和TestArray1()中,xlValues是堆栈上的局部变量,因此当函数返回时,运行时将释放它。您需要使xlValues堆分配的内存才能可靠地工作。 XLL的发展是一种黑暗的艺术。如果你要认真对待它,你应该投资一份Steve Dalton的书。