今日のジャンク.txt

プログラムメモ、きまぐれ日記、etc...

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[VC] IMAPI v1 (その2)

今回はIMAPIv1でデータディスクの作成を行います。
IMAPIとはなんぞや?」という方は(その1)からどうぞ。

IMAPIv1で作成できるデータディスクのフォーマットは、マイクロソフトがISO9660を拡張し、Windowsで一般的な書き込みフォーマットである『Joliet』と呼ばれるタイプですが、主な特徴は以下の通りです。

  • 最大64文字(128byte)のロングファイル名が使用可能
  • アルファベットの大文字、小文字の使い分けが可能
  • ユニコードファイル名のサポート

また、ISO9660形式との互換性を維持するために、8.3形式ファイル名も記録しており、Jolietに対応しないシステムでもファイルの読み取りが可能になっています。

「なんだか難しそうだな~」と思っても大丈夫。
フォーマットの管理や、ライティング処理はIMAPIの内部で隠蔽されているので、単純なライティングであれば、一般的なファイルアクセスと同じ感覚で利用する事が可能です。 (さすがに、市販のライティングソフト並の物を作るとなると一筋縄ではいきませんが…)

早速実験してみましょう。

ライティングイメージを指定するには、MSDiscMasterObjオブジェクトから、IJolietDiscMasterインタフェースを取得する必要がありますが、全体の流れは以下の通りになります。

  1. CoCreateInstance()で、MSDiscMasterObjオブジェクトのインスタンスを生成して、IDiscMasterのインタフェースを取得。
  2. IDiscMaster::Open()で、IMAPIのアクセスを開始。
  3. IDiscMaster::SetActiveDiscMasterFormat()で、使用するディスクフォーマットのIID( IID_IJolietDiscMaster )を指定し、IJolietDiscMasterインタフェースを取得する。
  4. IDiscRecorderインタフェースを取得し、IDiscMaster::SetActiveDiscRecorder()で、ライティングを行うレコーダーを指定する。
  5. ライティングイメージを保持する構造化ストレージを作成し、フォルダ/ファイルオブジェクトを追加する。
  6. IJolietDiscMaster::AddData()で、「5」で作成した構造化ストレージを指定する。
  7. IDiscMaster::RecordDisc()で、ライティングが開始される。
  8. 全ての処理が完了したら、最後にIDiscMaster::Close()で、IMAPIのアクセスを終了する。

VC2005用のサンプルコードは こちら を参考にして下さい。
サンプルコードでは最低限のエラーチェックしか行っていません。使用方法を誤ると、大切なデータが記録されたメディアが読み取れなくなる恐れがありますので、自己責任の元、注意してご利用下さい。

その他、主な注意点は以下の通り。

  • 「4」でIDiscMaster::SetActiveDiscRecorder()を呼び出す時、レコーダーに記録用メディアが挿入されていないとエラーが発生します。
  • 「6」でIJolietDiscMaster::AddData()を呼び出す前に、構造化ストレージに追加されたファイル/フォルダのストレージオブジェクトは、全てRelease()されている必要があります。

サンプルでは、ライティングイメージ用の構造化ストレッジをメモリ上に作成していますが、サイズの大きなファイルを大量に追加しようとするとメモリを圧迫するので、実際のアプリケーションで実装する時は、一旦テンポラリファイルを作成したり、HDD上のファイルを記録する時にタイムスタンプを保持する等、色々工夫が必要になると思います。

※構造化ストレージでちょっと勘違いしてる部分があったので、調べなおしておきます。
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

コメント

IMAPI・・・助かります

IMAPIの使用方法が知りたかったので、
大変助かります。

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://junktxt.blog90.fc2.com/tb.php/27-df4d0cf8
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。