IAppxBundleFactory
COM公式ドキュメント
バンドルパッケージの読み取りと書き込みを行うオブジェクトを作成します。
解説(Remarks)
IAppxBundleFactory インターフェイスは、バンドルパッケージのリーダーとライターを作成するためのファクトリメソッドに加え、バンドル外部にあるマニフェストのリーダーを作成するメソッドを提供します。
IAppxBundleFactory インターフェイスは、Appx バンドル API の主要なエントリポイントです。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
アプリパッケージを追加できる、書き込み専用のバンドルオブジェクトを作成します。
| outputStream | IStream* | in | シリアル化されたパッケージデータを受け取る出力ストリームです。このストリームは、少なくとも Write メソッドをサポートしている必要があります。 |
| bundleVersion | ULONGLONG | in | バンドルのバージョン番号です。 0 を指定すると、CreateBundleWriter は現在のシステム時刻から導出した値をバンドルのバージョン番号として設定します。バージョン番号が自動的に生成され、呼び出すたびにより大きいバージョン番号が生成されるため、0 を渡すことをお勧めします。 たとえば、2013/12/23 3:45:00 AM UTC に bundleVersion を 0 に設定して CreateBundleWriter を呼び出した場合、バンドルのバージョン番号は 2013.1223.0345.0000 になります。 |
| bundleWriter | IAppxBundleWriter** | out | このメソッドによって作成されたバンドルライターです。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。それ以外の場合は、次の表に示すものを含む(ただしこれらに限定されない)エラーコードを返します。
解説(Remarks)
バンドルに追加されたコンテンツは、Appx バンドルファイルとして outputStream にシリアル化して出力されます。
IStream オブジェクトから内容を読み取る、読み取り専用のバンドルオブジェクトを作成します。
| inputStream | IStream* | in | 読み取り対象となるパッケージの内容を提供する入力ストリームです。このストリームは Read、Seek、Stat をサポートしている必要があります。これらのメソッドが失敗した場合、そのエラーコードがこのメソッドに渡され、そのまま返されることがあります。 |
| bundleReader | IAppxBundleReader** | out | バンドルリーダーです。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。それ以外の場合は、次の表に示すものを含む(ただしこれらに限定されない)エラーコードを返します。
| リターンコード | 説明 |
|---|---|
| inputStream が提供する ZIP ファイルが、インターリーブされた OPC パッケージです。 | |
| inputStream が提供する OPC パッケージに、OPC のパッケージ/パートのリレーションシップが含まれています。 | |
| inputStream が提供する OPC パッケージにマニフェストまたはブロックマップが存在しないか、CI カタログが存在するのに署名ファイルが存在しません。 | |
| バンドルマニフェストが無効です。 |
AppxBundleManifest.xml を提供するスタンドアロンのストリームから、読み取り専用のバンドルマニフェストオブジェクトを作成します。
| inputStream | IStream* | in | 読み取り対象となるマニフェスト XML を提供する入力ストリームです。このストリームは Read、Seek、Stat をサポートしている必要があります。これらのメソッドが失敗した場合、そのエラーコードがこのメソッドに渡され、そのまま返されることがあります。 |
| manifestReader | IAppxBundleManifestReader** | out | マニフェストリーダーです。 |
戻り値
型: HRESULT
メソッドが成功した場合は S_OK を返します。それ以外の場合は、次の表に示すものを含む(ただしこれらに限定されない)エラーコードを返します。
| リターンコード | 説明 |
|---|---|
| inputStream に、マニフェストとして構文的に有効な XML が含まれていません。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAppxBundleFactory "{BBA65864-965F-4A5F-855F-F074BDBF3A7B}"
#usecom global IAppxBundleFactory IID_IAppxBundleFactory "{378E0446-5384-43B7-8877-E7DBDD883446}"
#comfunc global IAppxBundleFactory_CreateBundleWriter 3 sptr,int64,sptr
#comfunc global IAppxBundleFactory_CreateBundleReader 4 sptr,sptr
#comfunc global IAppxBundleFactory_CreateBundleManifestReader 5 sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。