Функция C в Excel 64 bit не работает как функция листа, но хорошо работает в VBA

Я пишу 64-битный Dll в C, который затем используется в Excel 64-битной, и я следую за образец проекта из https://sites.google.com/site/jrlhost/links/excelcdll.

Пример прост. Мы пишем функцию в C, которая должна возвращать квадратное значение ввода. Функция экспортируется в DLL, а затем используется в 64-разрядной версии Excel.

Я столкнулся с той же проблемой, что и в примере:

«Однако, когда вы используете squareForEXL в качестве функции рабочего листа, это приводит к ошибкам. На моем рабочем столе он возвращает правильный результат (например,« = squareForEXL (10) »возвращает 100), но затем выдает ошибку« Out of Stack Space »» либо в какой-то момент при вызове функции, либо при закрытии Excel. На моем ноутбуке он возвращает неверный результат (например, «= squareForEXL (10)» возвращает 0). В обоих случаях Excel иногда дает сбой ».

Функция C (squareForEXL) прекрасно работает при использовании в VBA, но она не работает как функция рабочего листа. В статье предлагается один обходной путь, но я все еще хочу посмотреть, есть ли способ решить проблему напрямую.

Ниже приведен код C и VBA:

double _stdcall squareForEXL (double *x)
{
return *x * *x;
}

Declare PtrSafe Function squareForEXL Lib "C:\Working\XLSquare\x64\Debug\XLSquare.dll" (ByRef x As Double) As Double

2

Решение

Вам нужно передать ссылку на squareForExl, приведенную в примере. Это тебе нужно,

double _stdcall squareForEXL (double &x)
{
return x * x;
}
0

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


По вопросам рекламы [email protected]