Я пишу 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
Вам нужно передать ссылку на squareForExl, приведенную в примере. Это тебе нужно,
double _stdcall squareForEXL (double &x)
{
return x * x;
}