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 パッケージとまったく同じです (私は自分のコードを売り込むのではなく、このパッケージを学習しようとしているだけです)。

私はこれに何日も悩まされています。うまくいけば、誰かが私を助けることができます。

前もって感謝します。

4

1 に答える 1

0

すべての返信ありがとうございます。私はそれを理解しました。

入力日付として 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 値の入力を処理する必要があります。

于 2013-01-22T15:09:48.407 に答える