Chapter.1
IDataObjectの使い道
2004/6/24
・サンプルソースで、構造体変数をNewで初期化しているものをNewしないように修正。
OLEの解説をしている本を眺めると、構造化ストレージを最初に解説しているものをよく見ます。
ところが、我々にとって、より重要なこととは、OLEに準拠したファイルの内容を表示することです。
その方が楽しいですしね。
そこで、この章では、OLEファイルをVB.NETで作成したフォームの上に表示することを目指します。
「OLEファイルの表示を行うのに必要なこととは・・・?」と聞かれた時にすぐ解答が出てくる方は勉強しすぎです。
「インプレースアクティベーションが・・・」とか考えられた方は、かなり勉強されていると思います。
「MFCが全部してくれます!」と答えれる方は真のプログラマだと思います。
上記の答はどれも正しいのですが、表示することに限定するならば、IDataObjectが最も簡単です。
ちなみに、OLEサーバがIViewObjectを実装しているローカルサーバであるならば、
OLEサブシステムの集約によって、IDataObjectが提供されます。
そのため、IDataObjectを使用するのが最も楽と言えます。
IDataObjectを使用した具体的な方法は、サンプルソースに託すことにします。
表示するための手段は判明しましたが、ここで避けて通れないのが、OLEファイルの読み込みです。
幸運なことにExcelは構造化ストレージを使わずに直接ファイルを読み込めるインターフェースを実装しています。
それは、IPersistFileです。このインターフェースを使用すれば、構造化ストレージの詳細に立ち入らずに済みます。
IPersistFileは.NET Frameworkのプラットフォーム相互運用機能により提供されている数少ないインターフェースです。
System.Runtime.InteropServices.UCOMIPersistFile がそれに当たります。
なお、ActiveXドキュメントサーバと呼ばれるOLEサーバは、IPersistFileの実装が強く推奨されています。
そのため、このインターフェースを実装しているOLEサーバは多数存在すると考えられます。
また、ファイルから起動するOLEサーバを決定しなければなりませんが、
これは単純に拡張子から、それに該当するOLEサーバを検索するという原始的手法で行います。
本来ならOLEのAPIを使用したいのですが、サイト側の実装を求めるAPIが大半を占めるので、今回は見送ります。
起動するOLEサーバの決定方法と、ファイルの表示・読み込みに使用するインターフェースが判明したので、
これで技術上不明瞭な点はクリアされたと思います。では、実際に作ってみましょう。
実際に作成して動かしてみた画面です。

上図で表示しているExcelファイルです。
バイナリコード表.xls(254KB未満)
基本方針として、ソースの解説は最小限に止めることにします。
何か質問があれば、掲示板までお願いします。
また、Excel以外のOLEサーバでも試してみると面白いかもしれません。
私が試してみたところ、PDFは駄目のようです。
OLEドラッグ&ドロップ以外では、あまり見かけないIDataObjectの意外な使用方法はいかがでしたでしょうか?
これを機に広大なOLE分野への興味を持って頂けたなら幸いです。
VB.NETサンプルソース:chap1.vb.lzh(18KB未満 2004/06/24)
前へ 次へ
OLE on .NET Frameworkへ
総合トップへ