IOpcFactory
COM公式ドキュメント
Packaging API のオブジェクトを作成し、パッケージの保存および読み込みをサポートします。
解説(Remarks)
パッケージのデシリアライズに使用しているストリームと同じストリームを、パッケージデータのシリアライズに使用しないでください。そのような使い方をすると、動作は未定義になる可能性があります。
Packaging API を使用するには、パッケージが ECMA-376 OpenXML, 1st Edition, Part 2: Open Packaging Conventions (OPC) で規定されている ZIP アーカイブにマップされている必要があります。
IOpcFactory インターフェイスを実装するファクトリを作成するには、CoCreateInstance 関数を呼び出します。このファクトリは特定のパッケージや Packaging API オブジェクトに結び付けられておらず、アプリケーションの存続期間を通じて使用できます。IOpcFactory を実装するファクトリを作成する方法を示すサンプルコードについては、Getting Started with the Packaging API を参照してください。
以前のバージョンの Windows における IOpcFactory のサポート
アプリケーションがサポートされていない IOpcFactory のメソッドを使用しようとした場合、E_NOTIMPL エラーコードが返されます。詳細については、Getting Started with the Packaging API および Platform Update for Windows Vista を参照してください。スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
パッケージのルートを表す OPC URI オブジェクトを作成します。
| rootUri | IOpcUri** | out | パッケージのルートの URI を表す OPC URI オブジェクトの IOpcUri インターフェイスへのポインターです。 |
戻り値
このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| rootUri パラメーターが NULL です。 |
解説(Remarks)
パッケージのルートの URI は常に "/" として表されます。
以前のバージョンの Windows におけるサポート
このメソッドの動作と性能は、サポートされているすべての Windows バージョンで同じです。詳細については、Getting Started with the Packaging API および Platform Update for Windows Vista を参照してください。スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
パート名を表すパート URI オブジェクトを作成します。
| pwzUri | LPWSTR | in | パートを含むパッケージのルートからの相対的なパートの位置を表す URI です。 |
| partUri | IOpcPartUri** | out | パート URI オブジェクトの IOpcPartUri インターフェイスへのポインターです。このオブジェクトは、pwzUri に渡された URI から導出されたパート名を表します。 パート名は OPC で規定された構文に準拠している必要があります。 |
戻り値
このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値/値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pwzUri と partUri のパラメーターの少なくとも一方が NULL です。 | |
|
パート名を空文字列 "" にすることはできません。 |
|
パート名を '/' にすることはできません。 |
|
パート名を "//" で開始することはできません。 |
|
パート名を '/' で終了することはできません。 |
|
パート名を '.' で終了することはできません。 |
|
パート名は、'.' で終わるセグメントを含むことができません。 |
|
パート名はフラグメント要素を持つことができません。フラグメント要素は、RFC 3986: URI Generic Syntax に記載されているとおり、'#' 文字の後に続きます。 |
|
パート名は、そこに含まれるリレーションシップのソースとして別の Relationships パートを示すような Relationships パートの名前にすることはできません。 |
|
パート名を絶対 URI にすることはできません。絶対 URI は、RFC 3986: URI Generic Syntax に記載されているとおり、スキーム要素とそれに続く ":" で始まります。 |
|
CreateUri 関数からの HRESULT エラーコードです。 |
|
WinINet API からの HRESULT エラーコードです。 |
解説(Remarks)
以前のバージョンの Windows におけるサポート
このメソッドの動作と性能は、サポートされているすべての Windows バージョンで同じです。詳細については、Getting Started with the Packaging API および Platform Update for Windows Vista を参照してください。スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
ファイル上にストリームを作成します。
| filename | LPWSTR | in | ストリームを作成する対象のファイルの名前です。 |
| ioMode | OPC_STREAM_IO_MODE | in | 作成するストリームの読み取り/書き込み状態を示す値です。 |
| securityAttributes | SECURITY_ATTRIBUTES* | in | このパラメーターで指定する SECURITY_ATTRIBUTES 構造体については、CreateFile 関数を参照してください。 |
| dwFlagsAndAttributes | DWORD | in | ファイルの設定と属性です。ほとんどのファイルでは FILE_ATTRIBUTE_NORMAL を使用できます。 このパラメーターの詳細については、CreateFile を参照してください。 |
| stream | IStream** | out | ストリームの IStream インターフェイスへのポインターです。 |
戻り値
このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| ioMode パラメーターに渡された値が、有効な OPC_STREAM_IO_MODE 列挙値ではありません。 | |
| filename と stream のパラメーターの少なくとも一方が NULL です。 | |
|
CreateFile 関数からの HRESULT エラーコードです。 |
解説(Remarks)
パッケージのデシリアライズに使用しているストリームと同じストリームを、パッケージデータのシリアライズに使用しないでください。動作が未定義になる可能性があります。
パッケージの読み込みまたは保存時にこのメソッドを使用する方法については、Loading a Package または Saving a Package のプログラミングタスクを参照してください。
以前のバージョンの Windows におけるサポート
このメソッドの動作と性能は、サポートされているすべての Windows バージョンで同じです。詳細については、Getting Started with the Packaging API および Platform Update for Windows Vista を参照してください。スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
空のパッケージを表すパッケージオブジェクトを作成します。
| package | IOpcPackage** | out | 空のパッケージを表すパッケージオブジェクトの IOpcPackage インターフェイスへのポインターです。 |
戻り値
このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| このメソッドは、このバージョンの Windows では実装されていません。 |
解説(Remarks)
以前のバージョンの Windows におけるサポート
このメソッドは、Windows 7 より前のバージョンの Windows ではサポートされていません。詳細については、Getting Started with the Packaging API および Platform Update for Windows Vista を参照してください。スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
ストリームからパッケージデータをデシリアライズし、読み取り対象のパッケージを表すパッケージオブジェクトを作成します。
| stream | IStream* | in | ストリームの IStream インターフェイスへのポインターです。 ストリームは読み取り可能かつシーク可能で、サイズを持ち、パッケージデータを含んでいる必要があります。また、ストリームが複製可能でない場合は、バッファリングされて順次読み取られるため、オーバーヘッドが発生します。 |
| flags | OPC_READ_FLAGS | in | パッケージの構成要素をキャッシュし、OPC の適合要件に照らして検証するための読み取り設定を指定する値です。 |
| package | IOpcPackage** | out | ストリームを通じて読み取られるパッケージを表すパッケージオブジェクトの IOpcPackage インターフェイスへのポインターです。 |
戻り値
このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| flags パラメーターに渡された値が、有効な OPC_READ_FLAGS 列挙値ではありません。 | |
| このメソッドは、このバージョンの Windows では実装されていません。 | |
| stream と package のパラメーターの少なくとも一方が NULL です。 | |
|
IStream インターフェイスからの HRESULT エラーコードです。 |
|
Package Consumption Error Group からの HRESULT エラーコードです。 |
|
Part URI Error Group からの HRESULT エラーコードです。 |
解説(Remarks)
パッケージのデシリアライズに使用しているストリームと同じストリームを、パッケージデータのシリアライズに使用しないでください。動作が未定義になる可能性があります。
Packaging API は、OPC で規定されている ZIP アーカイブにマップされ、かつ Zip32 (ZIP 2.0) または Zip64 (ZIP 4.5) のエンコーディングに基づくパッケージを扱うことができます。
このメソッドを使用してパッケージを読み込む方法については、Loading a Package のプログラミングタスクを参照してください。
以前のバージョンの Windows におけるサポート
このメソッドは、Windows 7 より前のバージョンの Windows ではサポートされていません。詳細については、Getting Started with the Packaging API および Platform Update for Windows Vista を参照してください。スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
パッケージオブジェクトによって表されるパッケージをシリアライズします。
| package | IOpcPackage* | in | シリアライズするデータを含むパッケージオブジェクトの IOpcPackage インターフェイスへのポインターです。 |
| flags | OPC_WRITE_FLAGS | in | シリアライズで使用されるエンコーディング方式を示す値です。 |
| stream | IStream* | in | パッケージオブジェクトのデータの書き込み先となるストリームの IStream インターフェイスへのポインターです。 |
戻り値
このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| flags パラメーターに渡された値が、有効な OPC_WRITE_FLAGS 列挙値ではありません。 | |
| このメソッドは、このバージョンの Windows では実装されていません。 | |
| stream と package のパラメーターの少なくとも一方が NULL です。 | |
|
IStream インターフェイスからの HRESULT エラーコードです。 |
|
Package Consumption Error Group からの HRESULT エラーコードです。 |
|
Part URI Error Group からの HRESULT エラーコードです。 |
解説(Remarks)
パッケージのデシリアライズに使用しているストリームと同じストリームを、パッケージデータのシリアライズに使用しないでください。動作が未定義になる可能性があります。
パッケージオブジェクトとして表されるパッケージを、このメソッドを使用して保存する方法については、Saving a Package のプログラミングタスクを参照してください。
以前のバージョンの Windows におけるサポート
このメソッドは、Windows 7 より前のバージョンの Windows ではサポートされていません。詳細については、Getting Started with the Packaging API および Platform Update for Windows Vista を参照してください。スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
パッケージオブジェクトのためのデジタル署名マネージャーオブジェクトを作成します。
| package | IOpcPackage* | in | デジタル署名マネージャーオブジェクトに関連付けるパッケージオブジェクトの IOpcPackage インターフェイスへのポインターです。 |
| signatureManager | IOpcDigitalSignatureManager** | out | パッケージオブジェクトと共に使用するために作成されたデジタル署名マネージャーオブジェクトの IOpcDigitalSignatureManager インターフェイスへのポインターです。 デジタル署名マネージャーオブジェクトは、Packaging API のデジタル署名関連のインターフェイスおよびメソッドへのアクセスを提供します。これらを使用して、パッケージオブジェクトが表すパッケージに署名したり、既に署名されたパッケージ内の署名を検証したりできます。 |
戻り値
このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値/値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| このメソッドは、このバージョンの Windows では実装されていません。 | |
|
デジタル署名オリジンのリレーションシップ型のリレーションシップが複数存在しますが、この種のリレーションシップは 1 つしか許可されていません。
このリレーションシップ型の詳細については、OPC を参照してください。 |
|
|
デジタル署名オリジン型のパッケージリレーションシップが、パッケージの外部の場所を対象としています。Digital Signature Origin パートは内部に配置されている必要があります。
このリレーションシップ型の詳細については、OPC を参照してください。 |
|
|
デジタル署名オリジン型のリレーションシップは見つかりましたが、Digital Signature Origin パート自体が見つかりませんでした。
このリレーションシップ型の詳細については、OPC を参照してください。 |
解説(Remarks)
Packaging Digital Signature Interfaces を使用してパッケージに署名している最中にそのパッケージが変更された場合、署名が失敗したり、一貫性のない署名やパッケージが生成されたりする可能性があります。
以前のバージョンの Windows におけるサポート
このメソッドは、Windows 7 より前のバージョンの Windows ではサポートされていません。詳細については、Getting Started with the Packaging API および Platform Update for Windows Vista を参照してください。スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IOpcFactory "{6D0B4446-CD73-4AB3-94F4-8CCDF6116154}" #usecom global IOpcFactory IID_IOpcFactory "{6B2D6BA0-9F3E-4F27-920B-313CC426A39E}" #comfunc global IOpcFactory_CreatePackageRootUri 3 sptr #comfunc global IOpcFactory_CreatePartUri 4 wstr,sptr #comfunc global IOpcFactory_CreateStreamOnFile 5 wstr,int,var,int,sptr #comfunc global IOpcFactory_CreatePackage 6 sptr #comfunc global IOpcFactory_ReadPackageFromStream 7 sptr,int,sptr #comfunc global IOpcFactory_WritePackageToStream 8 sptr,int,sptr #comfunc global IOpcFactory_CreateDigitalSignatureManager 9 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IOpcFactory "{6D0B4446-CD73-4AB3-94F4-8CCDF6116154}" #usecom global IOpcFactory IID_IOpcFactory "{6B2D6BA0-9F3E-4F27-920B-313CC426A39E}" #comfunc global IOpcFactory_CreatePackageRootUri 3 sptr #comfunc global IOpcFactory_CreatePartUri 4 wstr,sptr #comfunc global IOpcFactory_CreateStreamOnFile 5 wstr,int,sptr,int,sptr #comfunc global IOpcFactory_CreatePackage 6 sptr #comfunc global IOpcFactory_ReadPackageFromStream 7 sptr,int,sptr #comfunc global IOpcFactory_WritePackageToStream 8 sptr,int,sptr #comfunc global IOpcFactory_CreateDigitalSignatureManager 9 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。