Win32 API 日本語リファレンス
ホームStorage.Packaging.Opc › IOpcFactory

IOpcFactory

COM
IID6d0b4446-cd73-4ab3-94f4-8ccdf6116154継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

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。

vtbl 3 HRESULT CreatePackageRootUri(IOpcUri** rootUri)

パッケージのルートを表す OPC URI オブジェクトを作成します。

rootUriIOpcUri**outパッケージのルートの URI を表す OPC URI オブジェクトの IOpcUri インターフェイスへのポインターです。

戻り値

このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
rootUri パラメーターが NULL です。

解説(Remarks)

パッケージのルートの URI は常に "/" として表されます。

以前のバージョンの Windows におけるサポート

このメソッドの動作と性能は、サポートされているすべての Windows バージョンで同じです。詳細については、Getting Started with the Packaging API および Platform Update for Windows Vista を参照してください。

スレッドセーフティ

Packaging のオブジェクトはスレッドセーフではありません。

詳細については、Getting Started with the Packaging API を参照してください。

vtbl 4 HRESULT CreatePartUri(LPWSTR pwzUri, IOpcPartUri** partUri)

パート名を表すパート URI オブジェクトを作成します。

pwzUriLPWSTRinパートを含むパッケージのルートからの相対的なパートの位置を表す URI です。
partUriIOpcPartUri**out

パート URI オブジェクトの IOpcPartUri インターフェイスへのポインターです。このオブジェクトは、pwzUri に渡された URI から導出されたパート名を表します。

パート名は OPC で規定された構文に準拠している必要があります。

戻り値

このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。

戻り値/値 説明
S_OK
メソッドは成功しました。
E_POINTER
pwzUripartUri のパラメーターの少なくとも一方が NULL です。
OPC_E_NONCONFORMING_URI
0x80510001
パート名を空文字列 "" にすることはできません。
OPC_E_NONCONFORMING_URI
0x80510001
パート名を '/' にすることはできません。
OPC_E_NONCONFORMING_URI
0x80510001
パート名を "//" で開始することはできません。
OPC_E_NONCONFORMING_URI
0x80510001
パート名を '/' で終了することはできません。
OPC_E_NONCONFORMING_URI
0x80510001
パート名を '.' で終了することはできません。
OPC_E_NONCONFORMING_URI
0x80510001
パート名は、'.' で終わるセグメントを含むことができません。
OPC_E_NONCONFORMING_URI
0x80510001
パート名はフラグメント要素を持つことができません。フラグメント要素は、RFC 3986: URI Generic Syntax に記載されているとおり、'#' 文字の後に続きます。
OPC_E_NONCONFORMING_URI
0x80510001
パート名は、そこに含まれるリレーションシップのソースとして別の Relationships パートを示すような Relationships パートの名前にすることはできません。
OPC_E_RELATIVE_URI_REQUIRED
0x80510002
パート名を絶対 URI にすることはできません。絶対 URI は、RFC 3986: URI Generic Syntax に記載されているとおり、スキーム要素とそれに続く ":" で始まります。
CreateUri 関数のエラー
CreateUri 関数からの HRESULT エラーコードです。
WinINet のエラー
WinINet API からの HRESULT エラーコードです。

解説(Remarks)

以前のバージョンの Windows におけるサポート

このメソッドの動作と性能は、サポートされているすべての Windows バージョンで同じです。詳細については、Getting Started with the Packaging API および Platform Update for Windows Vista を参照してください。

スレッドセーフティ

Packaging のオブジェクトはスレッドセーフではありません。

詳細については、Getting Started with the Packaging API を参照してください。

vtbl 5 HRESULT CreateStreamOnFile(LPWSTR filename, OPC_STREAM_IO_MODE ioMode, SECURITY_ATTRIBUTES* securityAttributes, DWORD dwFlagsAndAttributes, IStream** stream)

ファイル上にストリームを作成します。

filenameLPWSTRinストリームを作成する対象のファイルの名前です。
ioModeOPC_STREAM_IO_MODEin作成するストリームの読み取り/書き込み状態を示す値です。
securityAttributesSECURITY_ATTRIBUTES*inこのパラメーターで指定する SECURITY_ATTRIBUTES 構造体については、CreateFile 関数を参照してください。
dwFlagsAndAttributesDWORDin

ファイルの設定と属性です。ほとんどのファイルでは FILE_ATTRIBUTE_NORMAL を使用できます。

このパラメーターの詳細については、CreateFile を参照してください。

streamIStream**outストリームの IStream インターフェイスへのポインターです。

戻り値

このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ioMode パラメーターに渡された値が、有効な OPC_STREAM_IO_MODE 列挙値ではありません。
E_POINTER
filenamestream のパラメーターの少なくとも一方が NULL です。
CreateFile 関数のエラー
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 を参照してください。

vtbl 6 HRESULT CreatePackage(IOpcPackage** package)

空のパッケージを表すパッケージオブジェクトを作成します。

packageIOpcPackage**out空のパッケージを表すパッケージオブジェクトの IOpcPackage インターフェイスへのポインターです。

戻り値

このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_NOTIMPL
このメソッドは、このバージョンの Windows では実装されていません。

解説(Remarks)

以前のバージョンの Windows におけるサポート

このメソッドは、Windows 7 より前のバージョンの Windows ではサポートされていません。詳細については、Getting Started with the Packaging API および Platform Update for Windows Vista を参照してください。

スレッドセーフティ

Packaging のオブジェクトはスレッドセーフではありません。

詳細については、Getting Started with the Packaging API を参照してください。

vtbl 7 HRESULT ReadPackageFromStream(IStream* stream, OPC_READ_FLAGS flags, IOpcPackage** package)

ストリームからパッケージデータをデシリアライズし、読み取り対象のパッケージを表すパッケージオブジェクトを作成します。

streamIStream*in

ストリームの IStream インターフェイスへのポインターです。

ストリームは読み取り可能かつシーク可能で、サイズを持ち、パッケージデータを含んでいる必要があります。また、ストリームが複製可能でない場合は、バッファリングされて順次読み取られるため、オーバーヘッドが発生します。

flagsOPC_READ_FLAGSinパッケージの構成要素をキャッシュし、OPC の適合要件に照らして検証するための読み取り設定を指定する値です。
packageIOpcPackage**outストリームを通じて読み取られるパッケージを表すパッケージオブジェクトの IOpcPackage インターフェイスへのポインターです。

戻り値

このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
flags パラメーターに渡された値が、有効な OPC_READ_FLAGS 列挙値ではありません。
E_NOTIMPL
このメソッドは、このバージョンの Windows では実装されていません。
E_POINTER
streampackage のパラメーターの少なくとも一方が NULL です。
IStream インターフェイスのエラー
IStream インターフェイスからの HRESULT エラーコードです。
Package Consumption のエラー
Package Consumption Error Group からの HRESULT エラーコードです。
Part URI のエラー
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 を参照してください。

vtbl 8 HRESULT WritePackageToStream(IOpcPackage* package, OPC_WRITE_FLAGS flags, IStream* stream)

パッケージオブジェクトによって表されるパッケージをシリアライズします。

packageIOpcPackage*inシリアライズするデータを含むパッケージオブジェクトの IOpcPackage インターフェイスへのポインターです。
flagsOPC_WRITE_FLAGSinシリアライズで使用されるエンコーディング方式を示す値です。
streamIStream*inパッケージオブジェクトのデータの書き込み先となるストリームの IStream インターフェイスへのポインターです。

戻り値

このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
flags パラメーターに渡された値が、有効な OPC_WRITE_FLAGS 列挙値ではありません。
E_NOTIMPL
このメソッドは、このバージョンの Windows では実装されていません。
E_POINTER
streampackage のパラメーターの少なくとも一方が NULL です。
IStream インターフェイスのエラー
IStream インターフェイスからの HRESULT エラーコードです。
Package Consumption のエラー
Package Consumption Error Group からの HRESULT エラーコードです。
Part URI のエラー
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 を参照してください。

vtbl 9 HRESULT CreateDigitalSignatureManager(IOpcPackage* package, IOpcDigitalSignatureManager** signatureManager)

パッケージオブジェクトのためのデジタル署名マネージャーオブジェクトを作成します。

packageIOpcPackage*inデジタル署名マネージャーオブジェクトに関連付けるパッケージオブジェクトの IOpcPackage インターフェイスへのポインターです。
signatureManagerIOpcDigitalSignatureManager**out

パッケージオブジェクトと共に使用するために作成されたデジタル署名マネージャーオブジェクトの IOpcDigitalSignatureManager インターフェイスへのポインターです。

デジタル署名マネージャーオブジェクトは、Packaging API のデジタル署名関連のインターフェイスおよびメソッドへのアクセスを提供します。これらを使用して、パッケージオブジェクトが表すパッケージに署名したり、既に署名されたパッケージ内の署名を検証したりできます。

戻り値

このメソッドは HRESULT を返します。戻り値には次の表に示すものが含まれますが、これらに限定されません。

戻り値/値 説明
S_OK
メソッドは成功しました。
E_NOTIMPL
このメソッドは、このバージョンの Windows では実装されていません。
OPC_E_DS_DUPLICATE_SIGNATURE_ORIGIN_RELATIONSHIP
0x8051001B
デジタル署名オリジンのリレーションシップ型のリレーションシップが複数存在しますが、この種のリレーションシップは 1 つしか許可されていません。

このリレーションシップ型の詳細については、OPC を参照してください。

OPC_E_DS_INVALID_SIGNATURE_ORIGIN_RELATIONSHIP
0x8051001C
デジタル署名オリジン型のパッケージリレーションシップが、パッケージの外部の場所を対象としています。Digital Signature Origin パートは内部に配置されている必要があります。

このリレーションシップ型の詳細については、OPC を参照してください。

OPC_E_DS_MISSING_SIGNATURE_ORIGIN_PART
0x8051001F
デジタル署名オリジン型のリレーションシップは見つかりましたが、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 の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。