none
"System._ComObject"と"mshtml.HTMLFormElementClass" RRS feed

  • 質問

  • 以下のようなコードで、objを"System._ComObject"として返すPCと"mshtml.HTMLFormElementClasss"として返すPCがあるのですが、なぜなのでしょうか?

    WebBrowser web;
      
      private void button1_Click(object sender, EventArgs e)
      {
       web = new WebBrowser();
       web.Navigate( "
    http://www.yahoo.co.jp" );
       web.DocumentCompleted += web_DocumentCompleted;
      }

      void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
      {
       object obj = web.Document.Forms[0].DomElement;   
      
       // "System._ComObject" or "mshtml.HTMLFormElementClass"
       MessageBox.Show( obj.ToString() );

      }

    このobjに対し、リフレクションをかけたいのですが、_comobjectだと失敗してしまいます。

    2006年9月1日 8:13

すべての返信

  • アプリのビルド時にmshtml.dllを参照設定していますか?

    もししていないのであればmshtml.dllを参照設定してみてください。

    その状態で_ComObjectとして返すPCでどうなるか試してみてください。

     

    また、_ComObjectとして返すPCにHTMLFormElementClassを返すPCと

    同じバージョンのmshtmlのTLBが登録されているか確認してみてください。

     

    一応参考までにCOMのマーシャリングについてのMSDNの記事のURLを貼っておきます。

    http://msdn2.microsoft.com/ja-jp/library/8023ct8s.aspx

    2006年9月1日 9:06
  • レス、ありがとうございます。

    いろいろ調べてたのですが、以外と大きな問題のようです。mshtml.xxxxはもうサポートしたくないクラスのようです。

    レジストリを調べると、ver1.037とかあるので、NET1.0の時代の遺物なのかもしれません。ただ、最新のWebBrowserクラスがこれを

    返してくるので、、、、。

    mshtml.dllとshdocvw.dllについて、先の方法でinteropすれば回避できそうです。

    参考:http://tdiary.seesaa.net/article/396477.html

    開発環境でしか動かない、とはまさに"It's a TRAP"だ。

    2006年9月2日 4:31