Chapter.1

IDataObjectの使い道


2004/6/24
 ・サンプルソースで、構造体変数をNewで初期化しているものをNewしないように修正。
2015/1/20
 ・Webサーバに負荷を掛ける攻撃を避けるためXLSファイルを圧縮。

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ファイルです。
バイナリコード表(1_2_xls.zip)(75KB未満)

基本方針として、ソースの解説は最小限に止めることにします。
何か質問があれば、掲示板までお願いします。

また、Excel以外のOLEサーバでも試してみると面白いかもしれません。 私が試してみたところ、PDFは駄目のようです。

OLEドラッグ&ドロップ以外では、あまり見かけないIDataObjectの意外な使用方法はいかがでしたでしょうか?
これを機に広大なOLE分野への興味を持って頂けたなら幸いです。
VB.NETサンプルソース:chap1.vb.lzh(18KB未満 2004/06/24)


前へ 次へ
OLE on .NET Frameworkへ
総合トップへ