IOleDocument
COM公式ドキュメント
ドキュメントオブジェクトが自身のデータのビューを作成する能力をコンテナーに伝えられるようにします。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
呼び出し元のプロセス内にドキュメントビューオブジェクトを作成し、そのオブジェクトの IOleDocumentView インターフェイスへのポインターを取得します。
| pIPSite | IOleInPlaceSite* | in | 新しいドキュメントビューオブジェクトに関連付けるビューサイトオブジェクトを表す IOleInPlaceSite インターフェイスへのポインター。このパラメーターは NULL にできます。たとえば、新しい未初期化のドキュメントオブジェクトにビューが含まれている場合などで、その場合、呼び出し元は後続の IOleDocumentView::SetInPlaceSite の呼び出しでビューを初期化する必要があります。 |
| pstm | IStream* | in | 新しいドキュメントビューオブジェクトが自身を初期化するためのデータを含むストリームへのポインター。NULL の場合、ドキュメントオブジェクトは新しいドキュメントビューオブジェクトを既定の状態で初期化します。 |
| dwReserved | DWORD | in | このパラメーターは予約されており、ゼロである必要があります。 |
| ppView | IOleDocumentView** | out | 新しいドキュメントビューオブジェクトへのインターフェイスポインターを受け取る IOleDocumentView ポインター変数へのポインター。成功した場合、ビューオブジェクトが不要になったときに呼び出し元が ppview ポインターに対して IUnknown::Release を呼び出す責任があります。 |
戻り値
このメソッドは成功時に S_OK を返します。その他に返される可能性のある値には以下のものがあります。
| Return code | Description |
|---|---|
| 操作が失敗しました。 | |
| 操作に使用できるメモリが不足しています。 | |
| 予期しないエラーが発生しました。 | |
| ppView のアドレスが NULL です。 |
解説(Remarks)
ドキュメントオブジェクトコンテナーのドキュメントサイトは CreateView を呼び出して、既定のデータから、または既存のストリームの内容を使用して、コンテナーのプロセス内に自身の新しいビューを作成するようドキュメントオブジェクトに指示します。
CreateView を呼び出しても、新しいビューが自身を表示することはありません。表示するには、IOleDocumentView::Show または IOleDocumentView::UIActivate のいずれかを呼び出す必要があります。
ドキュメントオブジェクトに関するステータス情報を取得します。
| pdwStatus | DWORD* | out | サポートされる動作に関する情報へのポインター。取り得る値は DOCMISC 列挙体から取得されます。 |
戻り値
このメソッドは成功時に S_OK を返します。その他に返される可能性のある値には以下のものがあります。
| Return code | Description |
|---|---|
| pdwStatus のアドレスが NULL です。 |
解説(Remarks)
このメソッドは、ドキュメントオブジェクトが複数のビュー、複雑な矩形、ポップアップウィンドウでのオープン、またはファイルの読み書きをサポートしているかどうかをコンテナーが確認する手段を提供します。
この列挙体の値は、DocObject キーの値としてレジストリにも格納されます。
呼び出し元への注意
ドキュメントオブジェクトをアクティブ化する前にこのメソッドを呼び出すことで、コンテナーは指定された動作をサポートまたは対応するために必要な手順を実行できます。実装者への注意
このメソッドは、たとえ pdwStatus の逆参照値がゼロであっても、すべてのドキュメントオブジェクトで完全に実装する必要があります。E_NOTIMPL は許容される戻り値ではありません。通常、返される DOCMISC 値は、パフォーマンスのためにハードコードする必要があります。ドキュメントオブジェクトがサポートするビューを列挙するオブジェクトを作成します。ビューが 1 つのみサポートされている場合は、そのビューへのポインターを返します。
| ppEnum | IEnumOleDocumentViews** | out | 列挙子オブジェクトへのインターフェイスポインターを受け取る IEnumOleDocumentViews ポインター変数へのポインター。 |
| ppView | IOleDocumentView** | out | 単一のビューオブジェクトへのインターフェイスポインターを受け取る IOleDocumentView ポインター変数へのポインター。 |
戻り値
オブジェクトが複数のビューをサポートしている場合、このメソッドは S_OK を返し、ppEnum には列挙子オブジェクトへのポインターが格納され、ppView は NULL になります。それ以外の場合、ppEnum は NULL になり、ppView には単一のビューへのインターフェイスポインターが格納されます。
その他に返される可能性のある値には以下のものがあります。
| Return code | Description |
|---|---|
| 操作に使用できるメモリが不足しています。 | |
| ppEnum または ppView のアドレスが無効です。呼び出し元は両方の引数に有効なポインターを渡す必要があります。 |
解説(Remarks)
ドキュメントオブジェクトが自身のデータの複数のビューをサポートしている場合、IEnumOleDocumentViews も実装し、そのインターフェイスのポインターを出力パラメーター ppEnum で渡す必要があります。このポインターを使用して、コンテナーはドキュメントオブジェクトがサポートするビューを列挙できます。
ドキュメントオブジェクトが単一のビューのみをサポートしている場合、IOleDocument::EnumViews はそのビューの IOleDocumentView ポインターを出力パラメーター ppView で渡します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IOleDocument "{B722BCC5-4E68-101B-A2BC-00AA00404770}" #usecom global IOleDocument IID_IOleDocument "{}" #comfunc global IOleDocument_CreateView 3 sptr,sptr,int,sptr #comfunc global IOleDocument_GetDocMiscStatus 4 var #comfunc global IOleDocument_EnumViews 5 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IOleDocument "{B722BCC5-4E68-101B-A2BC-00AA00404770}" #usecom global IOleDocument IID_IOleDocument "{}" #comfunc global IOleDocument_CreateView 3 sptr,sptr,int,sptr #comfunc global IOleDocument_GetDocMiscStatus 4 sptr #comfunc global IOleDocument_EnumViews 5 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。