タイトル : Re^2: Exeファイルの挙動が途中で止まる 投稿日 : 2020/03/15(Sun) 13:52 投稿者 : mogi
魔界の仮面弁士さん、前回に引き続きありがとうございます 返信が遅くなり申し訳ありません。 魔界の仮面弁士さんの助言をもとに現在、ソースコードをなぞっています。 > Excel を参照設定して呼び出しているのですね。 > 現象を再現可能な短い実験用プログラムを提示することはできますか? 申し訳ありません。 どういうわけか再現プログラムが上手くいかず(再現できず)。 もう少しお時間を頂ければ再現できるかもしれません…。 > また、Excel は Visible = True にて動作させていているでしょうか。 xlapp.Visible = trueのことでしょうか。 以前も進言頂いたのにも関わらず、Visible = Trueで実行しておりませんでした。 早速Visible = Trueとさせて頂きましたが、 表にExcelが立ち上がってきてしまいます。 表示状態にすると必ずこうなってしまうのでしょうか。 > コードを見ていないので何とも言えませんが、すべての COM オブジェクトに対して > 処置を行っていて、それでも動作不良を引き起こしているのであれば、 > RelaseComObject メソッドの戻り値が「0」になっていることを確認してみてください。 > > すべての RelaseComObject 呼び出しにおいて、 > 0 が返される実装になっている必要があります。 > > 0 未満の値になった時は、どこかで過解放を引き起こしています。 > 1 以上の場合は、型指定のミスなどにより参照カウントが予期せず増加することで、 > 解放不良を引き起こしている可能性があります。 ありがとうございます。 現在調査しております。過解放に関しては意識しておりませんでした。 解放漏れだけでは無く、過解放が原因で止まってしまう可能性もあるのですね。 > Selection や Active 何某に頼ったコードを書いていると、Delete 処理などのタイミングで、 > 何も選択されていない状態が一時的に引き起こされることで Exception に繋がることが > ありますが…今回の事象はそれとは違っている印象。 不勉強で申し訳ありませんが、 『Selection や Active 何某』とはなんのことなのでしょうか。 今回の事象とは関係なさそうとのことですが少し気になり…。 > 良くあるのは、コーディングミスによって暗黙の Global オブジェクトへの参照が発生し、 > それが残ってしまうケースです。この事故は .NET 空の呼び出しだけではなく、 > VB6 からの呼び出しであっても生じます。下記は VB6 向けの情報ですが参考までに。 > hhttps://support.microsoft.com/ja-jp/help/178510/excel-automation-fails-second-time-code-runs ありがとうございます。 提示して頂いた例を参考に現在調査しております。 ちなみに例ではCellsが何を参照にしているかを明示していないため、 解放漏れが起きているという理解であっていますでしょうか。 > > A「ネイティブフレームが呼び出し履歴の最初にあるため式を評価できません。」というのは > スレッドの Abort 等によってその表示になるケースだとか、あるいは > 一時停止していた時間が長すぎて COM 通信がタイムアウトで続行できなくなったりなど、 > 幾つかのパターンで発生するようですが、具体的な理由までは分からないですね。 なるほど、ありがとうございます。 ここから原因を探るのはやはり難しそうです…。 > > デバッグモードで式が最適化されているため適切に評価出来ないという理解であっているか。 > 最適化されるのはどちらかというと Debug ビルドよりも Release ビルドな気がします。 お恥ずかしい。 確かにそうでした。 |