2011年4月14日木曜日

ホスト(Internet Explorer等)のサイト(IOleClientSite等)を得る方法

Visual Studio 2005の、Windows Control Libraryプロジェクトで作成致します、UserControlでの話です。

一日掛けて試行錯誤しました所、次の方法で落ち着きました:

    IOleClientSite pClientSite = (IOleClientSite)Site.GetService(new AntiMoniker().GetType());

  [ComImport(), Guid("00000305-0000-0000-C000-000000000046")]
  class AntiMoniker {
  }


ポイントはnew AntiMoniker()の部分で、System.__ComObjectをインスタンス化しているという点です。かなり姑息な方法ですが… 他に良策を思いつきません。

必ずしもAntiMonikerである必要は無いと思います。

然しながら、何とかMoniker系は歴代Windowsでも問題なく使えそうなクラスだと思いましたので、AntiMoniker辺りを選びました。

また、AntiMonikerの中身は省いています(メソッド・プロパティは今回使いませんので)。

---
本件で参考にしたポストです:

How to use IOleClientSite in C#?
http://www.eggheadcafe.com/software/aspnet/33997199/how-to-use-ioleclientsite-in-c.aspx
How to cast a control to IOleObject
http://stackoverflow.com/questions/1216760/how-to-cast-a-control-to-ioleobject

0 件のコメント:

コメントを投稿