Visual StudioでC#を使って、コーディング中に以下の現象に遭遇しました。
遅延バインディング(late binding, dynamic binding)でCreateInstanceで固まる(フリーズ)
???
遅延バインディングでCreateInstanceで固まる
以下の記事で説明した通り、
ExcelやWordやPowerPointを扱うプログラムを書く際は遅延バインディングを使います。
そこでVisual StudioでC#を使って以下のようにコーディングしました。
1 2 3 4 5 6 7 8 9 10 11 |
Type clType = Type.GetTypeFromProgID("PowerPoint.Application"); if (clType != null) { try { clAppliClass = Activator.CreateInstance(clType); } catch { } } |
ところが、デバッグ実行中に、
clAppliClass = Activator.CreateInstance(clType);
のところで以下のメッセージを表示したまま、
CreateInstanceメソッドで固まってしまいます。
インフォメーション
しばらくお待ちください。
ここでclTypeは以下の通りです。
clType = {Name = "ApplicationClass" FullName = "Microsoft.Office.Interop.PowerPoint.ApplicationClass"}
不思議なことに
デバッグモジュールではCreateInstanceで固まるものの、
リリースモジュールでは問題なく実行されます。
ただ、デバッグモジュールが動かないとデバッグ出来ません。
CreateInstanceでPowerPoint 2013が強制終了
さらに不思議なことに以下の現象が発生します。
1. PowerPoint 2013を起動して、プレゼンテーションを開かないでおいておきます。
2. Visual Studioでデバッグ実行を開始します。
clAppliClass = Activator.CreateInstance(clType);
まで実行すると、CreateInstanceが呼び出されたタイミングでPowerPoint 2013が強制終了します。
3. その後、以下のメッセージが表示されてCreateInstanceがフリーズします(固まります)。
インフォメーション
しばらくお待ちください。
なんと!
PowerPoint 2013を起動して、プレゼンテーションを開かないでおいておくと、別プロセスで起動したはずのCreateInstanceがPowerPoint 2013を強制終了させました!!
別プロセスで実行してるはずなのに、こんなことが起こるんですね。
COMで
Microsoft.Office.Interop.PowerPoint.ApplicationClass
が連携しているのでしょうか??
次に違うことを試してみます。
1. PowerPoint 2013を起動して、プレゼンテーションを開いておきます。
2. Visual Studioでデバッグ実行を開始します。
clAppliClass = Activator.CreateInstance(clType);
がすんなり実行されてCreateInstanceは正常に戻ってきます。
一瞬だけ以下のメッセージが表示されます。
なんと!
PowerPoint 2013を起動して、何かプレゼンテーションを開いておくとCreateInstanceが固まらずに正常にメソッドの呼び出しが出来ました!!
これで正常にデバッグ出来ます。
まとめ
今回は現象の報告と回避方法だけです。
以下の事実だけ知っておけば、とりあえずはデバッグできます。
PowerPoint 2013を起動して、何かプレゼンテーションを開いておくとCreateInstanceが固まらずに正常にメソッドの呼び出しが出来ます。
今回は、
Type clType = Type.GetTypeFromProgID("PowerPoint.Application");
でPowerPointのアプリケーションを遅延バインディングしましたが、ExcelやWordも同様だと思われます。
世界中で同じような事例は報告されていないのでしょうか。
少し気持ち悪いですね。
プログラミングの無料レッスン体験
約8,000名の受講生と80社以上の導入実績のあるプログラミングやWebデザインのオンラインマンツーマンレッスンCodecamp
<Codecampの特徴>
1 現役エンジニアによる指導
2オンラインでのマンツーマン形式の講義
3大手企業にも導入されている実践的なカリキュラム
↓無料体験レッスン実施中です。
コメント