Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当UDF调用基于另一个UDF的输出时,Excel在用户定义的DLL上崩溃_C++_Visual Studio_Excel_Dll_User Defined Functions - Fatal编程技术网

C++ 当UDF调用基于另一个UDF的输出时,Excel在用户定义的DLL上崩溃

C++ 当UDF调用基于另一个UDF的输出时,Excel在用户定义的DLL上崩溃,c++,visual-studio,excel,dll,user-defined-functions,C++,Visual Studio,Excel,Dll,User Defined Functions,我写了一个dll文件,Excel可以使用它,但是我的电子表格在某些情况下会崩溃。如果有人能帮助我,我将不胜感激 我使用的C++代码如下:(主要是从C++包QuantLib借用) 在Excel中,我有以下VBA代码 Declare Function yz_nextBusinessDayUS_NYSE_C Lib _ "c:\lib\myExcelFile.dll" _ (ByVal ds As Long) As Long Function nextBizDayUS(d As Date)

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

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

在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++库中使用的源代码与QuiLIB包完全相同(我只是想学习这个包,而不是自己的代码),唯一的代码使用的是Posith::SyrdypTr. 我已经为此烦恼了好几天了。希望有人能帮我


提前感谢。

谢谢您的回复。我已经弄明白了

<>文件崩溃,因为当接受0值作为输入日期时,我的C++函数抛出异常。在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值输入。< /P>如果在这行之后添加<代码> doStase< /代码>会发生什么?code>nextBizDayUS=nextBusinessDayUS_C(CLng(d))这可能是一个计算顺序问题:尝试将数据类型从日期更改为变量,并添加IF IsEmpty(d),然后作为VBA的第一行退出函数function@k4knight你找到问题的答案了吗?如果没有评论。

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