IJolietDiscMaster
COM公式ドキュメント
IJolietDiscMaster インターフェースは、CD データディスクのステージングを可能にします。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Joliet データディスクのステージングに使用できるブロックの総数を取得します。
| pnBlocks | INT* | out | ディスク上で使用可能なデータブロックの総数。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが一般的に返されますが、返される可能性のあるエラー値はこれらだけではありません:
使用中のデータブロックの総数を取得します。
| pnBlocks | INT* | out | ステージングされたイメージ内で使用中のデータブロックの総数。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが一般的に返されますが、返される可能性のあるエラー値はこれらだけではありません:
データブロックのサイズを取得します。
| pnBlockBytes | INT* | out | 単一のデータブロックの合計サイズ (バイト単位)。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが一般的に返されますが、返される可能性のあるエラー値はこれらだけではありません:
解説(Remarks)
このメソッドは 2048 を返します。
ルートストレージの内容を、ステージングされたイメージファイルに追加します。このストレージは列挙され、すべてのサブストレージとストリームがステージングイメージファイルのルートファイルシステムに配置されます。サブストレージはフォルダーになり、ストリームはファイルになります。
| pStorage | IStorage* | inoptional | サブ項目をステージングされたイメージファイルのルートに追加する対象のストレージへのパス。 |
| lFileOverwrite | INT | in | このパラメーターが 0 以外の場合、同じ名前の既存ファイルを上書きします。それ以外の場合は、最後に追加されたファイルがディレクトリに表示されます。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが一般的に返されますが、返される可能性のあるエラー値はこれらだけではありません:
解説(Remarks)
AddData 操作を繰り返す場合、重複するファイルを含むフォルダーでは lFileOverwrite が評価されます。このフラグが 0 以外であれば、ファイルは上書きされます。名前が競合する以前のファイルも、イメージファイルからディスクへ書き込まれます。lFileOverwrite が 0 で、同じ名前のファイルが既に存在する場合、 AddData は IMAPI_E_FILEEXISTS で失敗します。
IDiscMaster::SetActiveDiscRecorder を呼び出した後は AddData を複数回呼び出せますが、新しいイメージを開始するときは必ず、また最初の AddData 呼び出しの直前に SetActiveDiscRecorder を呼び出す必要があります。これは、使用するレコーダーが前回のイメージ作成で使用したものと同じかどうかにかかわらず必要です。
このメソッドの呼び出しによって使用可能なデータブロック数を超過する場合、メソッドは IMAPI_E_DISCFULL を返し、追加しようとしたデータをすべて無視します。これにより、最終的な Joliet ファイルシステムが破損しないことが保証されます。
Joliet プロパティを格納する IPropertyStorage インターフェースへのポインターを取得します。
| ppPropStg | IPropertyStorage** | out | 現在定義されているすべてのプロパティを含む Joliet プロパティセットの IPropertyStorage インターフェースへのポインターのアドレス。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが一般的に返されますが、返される可能性のあるエラー値はこれらだけではありません:
解説(Remarks)
プロパティは IMAPI が閉じられた後は保持されません。プロパティセットは ID/TYPE/VALUE の組み合わせと ID/NAME の関連付けを格納できるため、IMAPI にとって便利です。それぞれの組み合わせが 1 つのプロパティであり、IMAPI はこれらのプロパティを Joliet インターフェース固有の値として使用します。たとえば、Joliet インターフェースは VolumeName プロパティをサポートします。
呼び出し元は、 SetJolietProperties を呼び出すことでこれらのプロパティを変更できます。現在のプロパティには次のものがあります。
Joliet プロパティを設定します。
| pPropStg | IPropertyStorage* | inoptional | 各種プロパティの新しい設定を Joliet インターフェースが取得するために使用できる IPropertyStorage インターフェースへのポインター。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが一般的に返されますが、返される可能性のあるエラー値はこれらだけではありません:
解説(Remarks)
アプリケーションは、 GetJolietProperties を呼び出してプロパティセットを取得し、必要な設定のみを変更してから SetJolietProperties を呼び出して、すべての値を同時に変更してください。
一部のプロパティは読み取り専用です。読み取り専用のプロパティとサポートされていないプロパティは、いずれもエラーを発生させることなく無視されます (IMAPI_S_PROPERTIESIGNORED を参照)。たとえば、このインターフェースにプロパティセットを渡して ClearlyNeverHeardOfBefore プロパティを変更しようとした場合、ClearlyNeverHeardOfBefore は不明な値であるため、そのプロパティは無視され、メソッドは成功します。
SetJolietProperties を呼び出した後、アプリケーションは GetJolietProperties を呼び出してプロパティ設定を確認する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IJolietDiscMaster "{E3BC42CE-4E5C-11D3-9144-00104BA11C5E}" #usecom global IJolietDiscMaster IID_IJolietDiscMaster "{}" #comfunc global IJolietDiscMaster_GetTotalDataBlocks 3 var #comfunc global IJolietDiscMaster_GetUsedDataBlocks 4 var #comfunc global IJolietDiscMaster_GetDataBlockSize 5 var #comfunc global IJolietDiscMaster_AddData 6 sptr,int #comfunc global IJolietDiscMaster_GetJolietProperties 7 sptr #comfunc global IJolietDiscMaster_SetJolietProperties 8 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IJolietDiscMaster "{E3BC42CE-4E5C-11D3-9144-00104BA11C5E}" #usecom global IJolietDiscMaster IID_IJolietDiscMaster "{}" #comfunc global IJolietDiscMaster_GetTotalDataBlocks 3 sptr #comfunc global IJolietDiscMaster_GetUsedDataBlocks 4 sptr #comfunc global IJolietDiscMaster_GetDataBlockSize 5 sptr #comfunc global IJolietDiscMaster_AddData 6 sptr,int #comfunc global IJolietDiscMaster_GetJolietProperties 7 sptr #comfunc global IJolietDiscMaster_SetJolietProperties 8 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。