タイプイニシャライザって何でしょうか?

解決


初心者  2009-01-08 20:25:36  No: 141218

前回「Form1処理時にForm2の処理結果を考慮させるには?」でShowDialogを使用したのですが、Form2の処理からForm1処理に戻った後にCallでModule内のSubプロシージャを呼び出そうとしたのですが、「TypeInitializationException」はハンドルされませんでした(タイプ初期化子が例外をスローしました)となってしまいます。ShowDialogを使用するとなにか規制があるのでしょうか?ご教授願います。


YuO  2009-01-08 20:42:49  No: 141219

クラス初期化子 (Shared Sub New())が例外を投げると,この例外にラップされた例外が発生します。
http://msdn.microsoft.com/ja-jp/library/system.typeinitializationexception.aspx

InnerExceptionを確認してください。


初心者  2009-01-08 20:49:31  No: 141220

すみません、Module内でWordの作成処理を実施する為に
Public Word As New Word.Global  とインスタンスを生成すると発生するみたいです。


YuO  2009-01-08 22:50:26  No: 141221

Moduleというのは,インスタンスメンバが存在せず,かつインスタンス化不可能なClassです。
Moduleのメンバは,すべてShared修飾されたものとして扱われます。
# RefactorでC#に逆コンパイルしてみるとよくわかると思います。

で,SharedなフィールドでNewしているため,クラス初期化子が暗黙に存在し,そこで例外が発生したのでTypeInitializationExceptionが発生したのだと思います。

さて,追試してみました。

発生した例外のInnerExceptionプロパティから
System.Runtime.InteropServices.COMException
のオブジェクトが取得でき,メッセージが
CLSID {000209F0-0000-0000-C000-000000000046} を含むコンポーネントの COM クラス ファクトリを取得中に、次のエラーが発生しました: 80040154。
とかだったりしませんか。
少し試してみたところだと,Wordのインスタンスが存在しない状況でGlobalオブジェクトを作成しようとすると,上記の例外が発生しました。
Applicationを先に作成して,その後でGlobalオブジェクトを作るようにしてみてはどうでしょうか。


初心者  2009-01-09 20:11:40  No: 141222

ご指摘の通り、
>CLSID {000209F0-0000-0000-C000-000000000046} を含むコンポーネントの >COM クラス ファクトリを取得中に、次のエラーが発生しました: 80040154。
が発生していました。ワードオブジェクト作成後にGlobalオブジェクトを作成したところエラーを回避できました。自分はよくModuleを使用するのですが、出来る限り使用しないほうがよろしいのでしょうか。ご教授いただきありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加