вернуть многомерный массив, чтобы отличиться от C ++ 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;
}

Есть идеи? заранее спасибо!!

0

Решение

И в TestArray (), и в TestArray1 () xlValues ​​- это локальная переменная в стеке, поэтому она будет освобождена средой выполнения при возврате функции. Вы должны сделать xlValues ​​выделенной памяти для кучи, чтобы это работало надежно. Разработка XLL — это что-то вроде темного искусства. Если вы собираетесь серьезно отнестись к этому, вы должны инвестировать в копию книги Стива Далтона.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector