100%確実ではないけれども、再現させる方法だけは見つけたので。
Windows 7を起動して、評価に使用したExcel95ブックをExcel2007で開くだけ。
すると、再計算50%を過ぎたところあたりでExcelがエラー(動作を停止)を起こす。
ここら辺が微妙なんだけど、50%のときもあれば、そうでない場合もあり。
2回目には起こらないので、都度OS再起動が必要。
ところが、通常、プロセスの異常時には、「デバッグしますか?」のダイアログが出るのだけれど、このExcel2007は自動修復するのか、デバッガでアタッチするとプロセスが終了してしまう。
困ったことナリ。
デバッグモードでは再現したことがないので、あたりをつけようにも・・・
とりあえず全エクスポート関数の大部分をtry~catchで囲んでみたのだけれども、状況は好転せず。
困った時にはなんでもやってみる。
dumpbinを実行してみた。
/importsでは特に問題となる点は見つからなかったのだが、/exportsで少し気になる点を発見。
今回追加した関数が、あのC++特有の超長い関数名でエクスポートされていることがわかった。
・・・そういや、動くからって、.hに宣言書かなかったような・・・
無駄に長い関数名なので、もしかしたらそこで呼び出しに失敗している可能性はありそう。
直してみることにする。
そして、直したんだけれど、問題解消せず。
デバッグビルドのものを使ったり、デバッグ起動すると、再現せず。
トレースぶち込むか・・・
トレースぶち込み後の再現までできた。
トレースを見ると、どうも実装した関数内で処理が止まっている模様。
でもなぁ、ほとんどの部分はtry~catchで囲まれているんだよなぁ。
突き抜けてんのかなぁ・・・
止まっているからといって、その部分が停止原因とは限らないわけだが、もう少し調査が必要。
コメントしちゃいなよ