2004-07
31
00:00:00
.NETでのMicrosoft.mshtml.dll問題


時には技術ネタも少し書いてみよう。(と言うか、愚痴)
R1.4から投稿日記のプレビュー機能を付けましたが、これはお察しの通りIEのActiveXコンポーネント(OLE)を取り込んで表示している訳です。(.NETではWeb Browserコントロールとかとも呼ばれますが、タブ型ブラウザなんかと同じ方法ですね。)
.NET環境ではこのWeb Browserコントロール自体はかなり直感的に使用できますが、問題はmshtmlコンポーネント
Web Browserコントロール内のコンテンツにアクセスする時には普通はこれを使うことになると思います。こいつはWeb Browserコントロールとは別に参照設定しないと使えませんが、その実体になるMicrosoft.mshtml.dllアセンブリは、どうやら.NET SDKやVS.NETをインストールしないとローカルPCにはインストールされないという罠がひそんでいるようです。少なくともWindowsUpdateで.NET Frameworkをインストールしても、何故かこいつはインストールしてくれません。
つまり、開発者環境で動いても、開発環境と縁のないユーザーでは使えないことになってしまいます。
じゃあ、それも含めて配布すればいいじゃん、と思ってもそのサイズは実に7.8M!旅行びと日記みたいにせいぜい数百Kのアプリに気楽に添付できるサイズじゃないんですよねぇ。
色々検索してみたのですが、そうした話題は少ないみたいです。(海外の掲示板では時々言及されてますが)
時々問題化しているようですが、例えばfubではMicrosoft.mshtml.dllごと配布されているみたいです。
でも、mshtmlを使ったサンプルはたくさん紹介されてますが、実際に一般ユーザーへ配布する際の注意について言及したところはまだ見たことがありません。
結局は、何故CLR環境に元々含んでくれてないのか、に尽きるのですが、他の開発者の皆さんはどう解決されてるんでしょうか。
それとも僕がいい方法を何も知らないだけなのかな??うーむ。

4 thoughts on “.NETでのMicrosoft.mshtml.dll問題

  1. Firefox 風 IE検索ツールバー 基本機能は完成

    Firefox 風 IE検索ツールバー の作成経過です。
    検索・スクロールと強調表示(ハイライト?蛍光ペン?)は出来ました。一応、基本機能完成です。…

  2. その後実装テストでいろいろ試行錯誤してみたのですが、一般的な動作自体では問題はなさそうです。
    しかし、やはりType.InvokeMember経由ではかなり煩雑なので使用するCOMにかなり精通していないときびしいですね。例えば必要となるメソッドをラッパークラスであらかじめ隠蔽しておく、などの次善策を取らないとコードがスパゲッティ化してしまうように思います。この辺が欠点といえば欠点でしょうか。
    また、旅行びと日記ではオフライン表示を可能にするためMHTMLを内部的に使っているのですが、これをMSHTML COM経由でうまく表示させる方法が見つかっていません。。
    そのためせっかく頂いた情報でしたが、現時点では実装を断念しました。

  3. なるほど、単にCOMだと捉えて、レイト・バインディングで動的メソッド呼び出しを使うんですね。これは思いつきませんでした。ありがとうございます。
    InvokeMemberについては下記に解説がありますね。
    http://dobon.net/vb/dotnet/programing/typeinvokemember.html
    ただ、当然のことながら開発時にインテリセンスが効かなくなるのと、DOMを使うなど少し複雑なことをしようとすると開発効率はかなり悪いかも知れません。
    とは言え、旅行びと日記的にはこれでもいいかも知れないなぁ。
    ちょっと試してみますね。
    # それにしても、リンク先の訳文はすごい日本語になってますね・・

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください