0

我编写了一个 Excel 可以使用的 dll 文件,但是我的电子表格在某些情况下会崩溃。如果有人可以帮助我,我将不胜感激。

我正在使用的 C++ 代码如下:(主要是从 C++ 包 QuantLib 借来的)

long __stdcall nextBusinessDay_C(long todaySerial) {
    Date today(todaySerial);
    UnitedStates us(UnitedStates::NYSE);
    return (long)(us.advance(today,1,Days).serialNumber());
}

在 Excel 中,我有以下 VBA 代码

Declare Function yz_nextBusinessDayUS_NYSE_C Lib _
    "c:\lib\myExcelFile.dll" _
(ByVal ds As Long) As Long

Function nextBizDayUS(d As Date) As Date
    nextBizDayUS = nextBusinessDayUS_C(CLng(d))
End Function

现在,在 Excel 中,如果我只使用:

//This works perfectly fine
A1: 1/1/2013         B1: =nextBizDayUS(A1)
A2: 1/2/2013         B2: =nextBizDayUS(A2)
A3: 1/2/2013         B3: =nextBizDayUS(A3)
...                  ...

我可以像这样继续写几千行,没有任何问题。但是,如果我使用一个函数的输出作为另一个函数的输入,每次按下 Ctrl+Alt+F9 时,我的 Excel 都会崩溃:

//This crashes every time when I hit Ctrl+Alt+F9!!!
A1: 1/1/2013
A2: =nextBizDayUS(A1)
A3: =nextBizDayUS(A2)

在我的 C++ 库中使用的源代码与 QuantLib 包完全相同(我只是想学习这个包,而不是推销我自己的代码)代码使用的唯一花哨的东西是 boost::shared_ptr<>。

我为此困扰了很多天。希望有人可以帮助我。

提前致谢。

4

1 回答 1

0

谢谢大家的回复。我已经想通了。

文件崩溃是因为我的 C++ 函数在接受 0 值作为输入日期时抛出异常。在 excel 中,如果我有以下工作表:

A1: 1/1/2013
A2: =nextBizDayUS(A1)
A3: =nextBizDayUS(A2)

一旦我按下 Ctrl+Alt+F9,nextBizDayUS 将按以下顺序评估 3 次:

=nextBizDayUS(0)  'cell A3
=nextBizDayUS(A1)  'cell A2
=nextBizDayUS(A2)  'cell B3

不知道 Excel 为什么这样做,但为了解决这个问题,我只需要在我的 C++ 函数中添加一个特殊情况来处理 0 值输入。

于 2013-01-22T15:09:48.407 回答