DirectXファイルリファレンス

この節では、DirectX version 6.0で導入された、Microsoft® DirectX® (.x)ファイルの読み書きに使用する関数、インターフェイス、オブジェクト、データ型について解説する。また、インターフェイス間の関係を簡単に紹介し、インターフェイスの継承を示す階層図も示す。DirectXファイルのメソッドは、テキストファイルとバイナリファイルのどちらの読み書きにも使用できる。

これらのインターフェイスを使用するときは、「DirectXファイルフォーマットアーキテクチャ」で解説しているDirectXファイルのフォーマットに精通しておく必要がある。ファイルフォーマットを理解していると、インターフェイスとそのメソッドの目的をより理解しやすくなる。

この節には、次の項目が含まれている。

はじめに

DirectX (.x)ファイルからのデータのロード方法と、DirectX (.x)ファイルへのデータの保存方法について、概要を説明する。DirectXファイルメソッドは、テキストとバイナリの両方のDirectXファイルを扱い、ファイル、メモリ、リソース、URLなど、各種ソースからのロードをサポートしている。

DirectXファイルのインターフェイスを使用するには、まずDirectXFileCreate関数を使用して IDirectXFileオブジェクトを作成する。

ファイルのロード

次の手順でDirectXファイルをロードする。

  1. DirectXFileCreate関数を使用して、IDirectXFileオブジェクトを作成する。
  2. ロードするDirectXファイルにテンプレートが存在しない場合、IDirectXFile::RegisterTemplatesメソッドを使用してテンプレートを登録する。
  3. IDirectXFile::CreateEnumObjectメソッドを使用して、IDirectXFileEnumObject列挙オブジェクトを作成する。
  4. ファイル内のオブジェクトごとに繰り返す。オブジェクトごとに、次のステップを実行する。
    1. IDirectXFileEnumObject::GetNextDataObjectメソッドを使用して、IDirectXFileDataオブジェクトを取得する。
    2. IDirectXFileData::GetTypeメソッドを使用して、データ型を取得する。
    3. IDirectXFileData::GetDataメソッドを使用して、データをロードする。
    4. オブジェクトにオプションのメンバがあるときは、IDirectXFileData::GetNextObjectメソッドを呼び出して、そのオプションのメンバを取得する。
  5. IDirectXFileDataオブジェクトを解放する。
  6. IDirectXFileEnumObjectオブジェクトを解放する。
  7. IDirectXFileオブジェクトを解放する。

ファイルの保存

次の手順で、DirectXファイルのテンプレートとデータをDirectXファイルに保存する。

  1. DirectXFileCreate関数を使用して、IDirectXFileオブジェクトを作成する。
  2. IDirectXFile::RegisterTemplatesメソッドを使用して、これから使用するテンプレートをDirectXファイルシステムに通知する。
  3. IDirectXFile::CreateSaveObjectメソッドを使用して、IDirectXFileSaveObjectオブジェクトを作成する。
  4. 必要に応じ、IDirectXFileSaveObject::SaveTemplatesメソッドを使用して、テンプレートを保存する。
  5. 保存するオブジェクトごとに繰り返す。トップレベルのオブジェクトごとに、次のステップを実行する。
    1. IDirectXFileSaveObject::CreateDataObjectメソッドを使用して、ファイルのトップレベルのオブジェクトとして、IDirectXFileDataオブジェクトを作成する。トップレベルのデータオブジェクトにオプションの子オブジェクトがある場合、次のステップの「追加方法」の欄にある適切なメソッドを使用して、オブジェクトに子オブジェクトを追加する。
    2. IDirectXFileDataオブジェクトのテンプレートが許可していれば、各オブジェクトはオプションの子オブジェクトを持つことができる。子オブジェクトは、IDirectXFileDataIDirectXFileDataReference、またはIDirectXFileBinaryの3つのオブジェクトタイプのうち、どれでもよい。保存する必要のあるオブジェクトごとに繰り返し、次の表にある、オブジェクトタイプにあった方法で、オプションの子メンバをオブジェクトリストに追加する。
      オブジェクトタイプ 追加方法
      データ IDirectXFileSaveObject::CreateDataObjectメソッドを呼び出してIDirectXFileDataオブジェクトを作成し、次にIDirectXFileData::AddDataObjectメソッドを呼び出してオブジェクトの子として追加する。
      データ参照 IDirectXFileData::AddDataReferenceメソッドを呼び出し、データ参照オブジェクトをオブジェクトの子として作成し追加する。
      バイナリ IDirectXFileData::AddBinaryObjectメソッドを呼び出し、バイナリオブジェクトをオブジェクトの子として作成し追加する。
    3. IDirectXFileSaveObject::SaveDataメソッドを呼び出し、データオブジェクトと子オブジェクトをすべて保存する。
    4. IDirectXFileDataオブジェクトを解放する。
  6. IDirectXFileSaveObjectオブジェクトを解放する。
  7. IDirectXFileオブジェクトを解放する。

インターフェイス階層

DirectXファイルインターフェイス間の関係を以下に示す。

 IUnknown
 |
 +--IDirectXFile
 |
 +--IDirectXFileEnumObject
 |
 +--IDirectXFileObject
 |  |
 |  +--IDirectXFileBinary
 |  |
 |  +--IDirectXFileData
 |  |
 |  +--IDirectXFileDataReference
 |
 +--IDirectXFileSaveObject

関数とインターフェイス

DirectXでは、次のDirectXファイル関数とインターフェイスが用意されている。

次の表で、DirectXファイルの各インターフェイスに対応するグローバルユニーク識別子(GUID)を示す。QueryInterfaceメソッドでGUIDを使用し、子オブジェクトのタイプを判別する方法については、IDirectXFileDataインターフェイスの「はじめに」を参照すること。
インターフェイス GUID
IDirectXFile IID_IDirectXFile
IDirectXFileBinary IID_IDirectXFileBinary
IDirectXFileData IID_IDirectXFileData
IDirectXFileDataReference IID_IDirectXFileDataReference
IDirectXFileEnumObject IID_IDirectXFileEnumObject
IDirectXFileObject IID_IDirectXFileObject
IDirectXFileSaveObject IID_IDirectXFileSaveObject

DirectXFileCreate関数

DirectXFileCreate関数は、IDirectXFileインターフェイスを作成する。

構文

STDAPI DirectXFileCreate(LPDIRECTXFILE *ppDirectXFile);

パラメータ

ppDirectXFile
作成されたIDirectXFileインターフェイスを受け取るポインタのアドレス。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADALLOC
DXFILEERR_BADVALUE

注意

この関数を使用した後、IDirectXFileメソッドを使用して、テンプレートの登録 (RegisterTemplates)、列挙オブジェクトの作成 (CreateEnumObject)、または保存オブジェクトの作成 (CreateSaveObject) を行う。

IDirectXFile

IDirectXFileインターフェイスにより、IDirectXFileEnumObjectオブジェクトとIDirectXFileSaveObjectオブジェクトを作成し、テンプレートを登録することができる。

DirectXFileCreate関数を使用して、このオブジェクトのインスタンスを作成する。

IDirectXFileインターフェイスでは、次のメソッドが用意されている。

IDirectXFile::CreateEnumObject

IDirectXFile

列挙オブジェクトを作成する。

構文

HRESULT CreateEnumObject(
  LPVOID pvSource,
  DXFILELOADOPTIONS dwLoadOptions,
  LPDIRECTXFILEENUMOBJECT * ppEnumObj);

パラメータ

pvSource
このポインタが指すデータの内容は、dwLoadOptionsの値によって次の表のように異なる。
dwLoadOptions pvSourceの内容
DXFILELOAD_FROMFILE ファイル名
DXFILELOAD_FROMRESOURCE DXFILELOADRESOURCE構造体
DXFILELOAD_FROMMEMORY DXFILELOADMEMORY構造体
DXFILELOAD_FROMURL URL(Uniform Resource Locator)の名前
dwLoadOptions
データのソースを指定する値。DXFILELOADOPTIONS値の1つ。
ppEnumObj
作成されたIDirectXFileEnumObjectインターフェイスを受け取るポインタのアドレス。

戻り値

次の値のうち1つを返す。
 
DXFILE_OK
DXFILEERR_BADALLOC
DXFILEERR_BADFILEFLOATSIZE
DXFILEERR_BADFILETYPE
DXFILEERR_BADFILEVERSION
DXFILEERR_BADRESOURCE
DXFILEERR_BADVALUE
DXFILEERR_FILENOTFOUND
DXFILEERR_RESOURCENOTFOUND
DXFILEERR_URLNOTFOUND

注意

このメソッドを使用した後、IDirectXFileEnumObjectメソッドの1つを使用し、データオブジェクトを取得する。

IDirectXFile::CreateSaveObject

IDirectXFile

IDirectXFileSaveObjectオブジェクトのインスタンスを作成する。

構文

HRESULT CreateSaveObject(
  LPCSTR szFileName,
  DXFILEFORMAT dwFileFormat,
  LPDIRECTXFILESAVEOBJECT * ppSaveObj);

パラメータ

szFileName
データを保存するファイルの名前へのポインタ。
dwFileFormat
ファイルフォーマット。DXFILEFORMAT定数の1つ。
ppSaveObj
作成されたIDirectXFileSaveObjectオブジェクトを受け取るポインタのアドレス。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADALLOC
DXFILEERR_BADFILE
DXFILEERR_BADVALUE

注意

このメソッドを使用した後、IDirectXFileSaveObjectインターフェイスのメソッドを使用して、データオブジェクトを作成し、テンプレートやデータを保存する。

IDirectXFile::RegisterTemplates

IDirectXFile

カスタムテンプレートを登録する。

構文

HRESULT RegisterTemplates(
  LPVOID pvData,
  DWORD cbSize);

パラメータ

pvData
DirectXファイルを構成するバッファへのポインタ。DirectXファイルは、テンプレートを含むテキストまたはバイナリフォーマットである。
cbSize
pvDataが指すバッファのサイズ。単位はバイト。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADFILEFLOATSIZE
DXFILEERR_BADFILETYPE
DXFILEERR_BADFILEVERSION
DXFILEERR_BADVALUE
DXFILEERR_PARSEERROR

注意

次のコードは、RegisterTemplatesの呼び出し例と、pvDataが指すバッファ内容の例である。

IDirectXFile * pDXFile;

char *szTemplates = "xof 0303txt 0032\
    template SimpleData { \
        <2b934580-9e9a-11cf-ab39-0020af71e433> \
        DWORD item1;DWORD item2;DWORD item3;} \
    template ArrayData { \
        <2b934581-9e9a-11cf-ab39-0020af71e433> \
        DWORD cItems; array DWORD aItem[2][cItems]; [...] } \
    template RestrictedData { \
        <2b934582-9e9a-11cf-ab39-0020af71e433> \
        DWORD item; [SimpleData]}";

hr = pDXFile->RegisterTemplates(szTemplates, strlen(szTemplates));

テンプレートはすべて、名前とUUID (ユニバーサルユニーク識別子) を指定しなければならない。

IDirectXFileBinary

IDirectXFileBinaryインターフェイスにより、バイナリデータの読み込みとデータに関する情報の取得ができる。

IDirectXFileBinaryインターフェイスでは、次のメソッドが用意されている。

また、IDirectXFileBinaryは、IDirectXFileObject::GetIdメソッドとIDirectXFileObject::GetNameメソッドを継承する。

IDirectXFileBinary::GetMimeType

IDirectXFileBinary

バイナリデータのmimeタイプを取得する。

構文

HRESULT GetMimeType(LPCSTR * pszMimeType);

パラメータ

pszMimeType
mimeタイプの文字列を受け取るポインタのアドレス。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADVALUE

指定された.XファイルのバイナリオブジェクトにMimeタイプが指定されていない場合、この関数は*pszMimeTypeにNULLを設定する。

IDirectXFileBinary::GetSize

IDirectXFileBinary

バイナリデータのサイズを取得する。

構文

HRESULT GetSize(DWORD * pcbSize);

パラメータ

pcbSize
バイナリデータのサイズを受け取るポインタ。単位はバイト。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADVALUE

IDirectXFileBinary::Read

IDirectXFileBinary

バイナリデータを読み出す。

構文

HRESULT Read(
  LPVOID pvData,
  DWORD cbSize,
  LPDWORD pcbRead);

パラメータ

pvData
読み出されたデータを受け取るバッファへのポインタ。
cbSize
pvDataが指すバッファのサイズ。単位はバイト。
pcbRead
読み出されたバイト数へのポインタ。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADVALUE
DXFILEERR_NOMOREDATA

IDirectXFileData

IDirectXFileDataインターフェイスでは、データオブジェクトの直接階層の構築またはアクセスができるメソッドが用意されている。テンプレートの制約が階層を決定する。テンプレートにより許可されたデータ型は、オプションメンバと呼ばれる。オプションメンバは必須ではないが、これがないと、オブジェクトから重要な情報が欠落することがある。オプションメンバは、データオブジェクトの子として保存される。子オブジェクトは、別のデータオブジェクト、以前のデータオブジェクトへの参照、またはバイナリオブジェクトである。

オブジェクトをDirectXファイルに保存するときは、AddBinaryObjectAddDataObject、またはAddDataReferenceを使用して、それぞれバイナリオブジェクト、データオブジェクト、またはデータ参照オブジェクトをファイルに追加する。詳細については、「ファイルの保存」を参照すること。

既存のDirectXファイルのオブジェクトを列挙するときは、次のように、GetDataGetNextObject、およびGetTypeメソッドを使用する。

  1. GetTypeを使用して、オブジェクトのテンプレートのGUIDを取得する。たとえば、メッシュオブジェクトの場合、メッシュテンプレートのGUIDを取得する。
  2. GetDataを使用して、連続するメモリチャンクから、必要なオブジェクトメンバを取得する。
  3. 子オブジェクトごとに、次のステップを実行する。
    1. GetNextObjectを使用して、子オブジェクトを取得する。
    2. QueryInterfaceを使用し、IDirectXFileDataIDirectXFileDataReference、およびIDirectXFileBinaryインターフェイスをサポートするかどうかを順に問い合わせて、子オブジェクトのタイプ (データ、データ参照、またはバイナリ) を判別する。サポートされるインターフェイスが、オブジェクトのタイプを示している。次のコードでは、オブジェクトがIDirectXFileBinaryをサポートするかどうかを判別することにより、バイナリオブジェクトかどうかを判別している。
      IDirectXFileObject *DXFileObj;
      IDirectXFileBinary *DXFileBinary;
      
      if (FAILED(DXFileObj->QueryInterface(IID_IDirectXFileBinary,
                                           (LPVOID *)&DXFileBinary))
      {
          // オブジェクトはIDirectXFileBinaryをサポートしないため、
      	// バイナリオブジェクトではない。
      }
      else
      {
          // オブジェクトはバイナリである。
      }
      
    3. 子オブジェクトのタイプを判別した後、そのタイプに合ったインターフェイス (IDirectXFileDataIDirectXFileDataReference、またはIDirectXFileBinary) のメソッドを使用して、子オブジェクトの操作を行う。

IDirectXFileDataインターフェイスでは、次のメソッドが用意されている。

また、IDirectXFileDataIDirectXFileObject::GetIdメソッドとIDirectXFileObject::GetNameメソッドを継承する。

IDirectXFileData::AddBinaryObject

IDirectXFileData

子オブジェクトとしてバイナリオブジェクトを作成して追加する。

構文

HRESULT AddBinaryObject(
  LPCSTR szName,
  const GUID * pguid,
  LPCSTR szMimeType,
  LPVOID pvData,
  DWORD cbSize);

パラメータ

szName
オブジェクトの名前へのポインタ。オプションで、オブジェクトが名前を必要としないときは、NULLを指定する。
pguid
オブジェクトを表すGUIDへのポインタ。オプションで、オブジェクトがGUIDを必要としないときは、NULLを指定する。
szMimeType
オブジェクトのmimeタイプへのポインタ。
pvData
オブジェクトのデータへのポインタ。
cbSize
pvDataが指すバッファのサイズ。単位はバイト。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADALLOC
DXFILEERR_BADVALUE

注意

子オブジェクトの保存の詳細については、このインターフェイス、IDirectXFileDataの「はじめに」を参照すること。

IDirectXFileData::AddDataObject

IDirectXFileData

子オブジェクトとしてデータオブジェクトを追加する。

構文

HRESULT AddDataObject(LPDIRECTXFILEDATA pDataObj);

パラメータ

pDataObj
子オブジェクトとして追加するIDirectXFileDataオブジェクトへのポインタ。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADALLOC
DXFILEERR_BADVALUE

注意

このメソッドを呼び出す前に、IDirectXFileSaveObject::CreateDataObjectメソッドを使用して、IDirectXFileDataオブジェクトを作成する。

オブジェクトの保存の詳細については、このインターフェイス、IDirectXFileDataの「はじめに」を参照すること。

IDirectXFileData::AddDataReference

IDirectXFileData

子オブジェクトとしてデータ参照オブジェクトを作成して追加する。

構文

HRESULT AddDataReference(
  LPCSTR szRef,
  const GUID * pguidRef);

パラメータ

szRef
参照されるデータオブジェクトの名前へのポインタ。pguidRefでGUIDが参照できる場合は、NULLでよい。
pguidRef
データを表すGUIDへのポインタ。szRefで名前が参照できる場合は、NULLでよい。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADALLOC
DXFILEERR_BADVALUE

注意

パラメータszRefまたはpguidRefの少なくともどちらか1つは、非NULLでなければならない。

オブジェクトの保存の詳細については、このインターフェイス、IDirectXFileDataの「はじめに」を参照すること。

IDirectXFileData::GetData

IDirectXFileData

1つのオブジェクトメンバのデータ、またはすべてのメンバのデータを取得する。

構文

HRESULT GetData(
  LPCSTR szMember,
  DWORD * pcbSize,
  void ** ppvData);

パラメータ

szMember
データを取得するメンバの名前。要求された全メンバのデータを取得するときは、NULLを指定する。
pcbSize
ppvDataのバッファサイズを受け取るポインタ。単位はバイト。
ppvData
szMemberに関連するデータを受け取るポインタのアドレス。szMemberがNULLのとき、*ppvDataは、連続するメモリブロックに要求された全メンバのデータが入っているバッファを指すように設定される。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADARRAYSIZE
DXFILEERR_BADDATAREFERENCE
DXFILEERR_BADVALUE

注意

このメソッドは、要求されたデータオブジェクトのメンバのデータを取得するが、オプション (子) メンバのデータは取得しない。子オブジェクトを取得するには、GetNextObjectを使用する。

オブジェクトの列挙の詳細については、このインターフェイス、IDirectXFileDataの「はじめに」を参照すること。

IDirectXFileData::GetNextObject

IDirectXFileData

DirectXファイルの、次の子データオブジェクト、データ参照オブジェクト、またはバイナリオブジェクトを取得する。

構文

HRESULT GetNextObject(LPDIRECTXFILEOBJECT * ppChildObj);

パラメータ

ppChildObj
子オブジェクトのIDirectXFileObjectインターフェイスへのポインタを受け取るアドレス。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADVALUE
DXFILEERR_NOMOREOBJECTS

注意

取得するオブジェクトのタイプを判別するには、QueryInterfaceを使用して、取得するオブジェクトにIDirectXFileDataIDirectXFileDataReference、またはIDirectXFileBinaryインターフェイスをサポートするかどうかを問い合わせる。サポートされるインターフェイスが、オブジェクトタイプ (データ、データ参照、またはバイナリ) を示している。

子オブジェクト、オブジェクトの列挙、およびオブジェクトタイプの判別に関する詳細については、このインターフェイス、IDirectXFileDataの「はじめに」を参照すること。

IDirectXFileData::GetType

IDirectXFileData

オブジェクトのテンプレートのGUIDを取得する。

構文

HRESULT GetType(const GUID ** ppguid);

パラメータ

ppguid
オブジェクトのテンプレートのGUIDを受け取るポインタのアドレス。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADVALUE

IDirectXFileDataReference

IDirectXFileDataReferenceインターフェイスは、データ参照オブジェクトをサポートする。データ参照オブジェクトは、ファイル内で既に定義されているデータオブジェクトを参照する。これにより、ファイル内で定義を繰り返さなくても、同じオブジェクトを何度も使用することができる。

オブジェクトがデータ参照オブジェクトであると判別された後、このインターフェイスのResolveメソッドを使用して、ファイル内で既に定義されている実際のオブジェクトを取得する。データ参照オブジェクトの判別方法の詳細については、IDirectXFileDataインターフェイスを参照すること。

また、IDirectXFileDataReferenceは、IDirectXFileObject::GetIdIDirectXFileObject::GetNameメソッドを継承する。

IDirectXFileDataReference::Resolve

IDirectXFileDataReference

データ参照を解決する。

構文

HRESULT Resolve(LPDIRECTXFILEDATA * ppDataObj);

パラメータ

ppDataObj
IDirectXFileDataオブジェクトを受け取るポインタのアドレス。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADVALUE
DXFILEERR_NOTFOUND

IDirectXFileEnumObject

IDirectXFileEnumObjectインターフェイスでは、処理を繰り返して、ファイルの全データオブジェクトを取得したり、GUIDまたは名前でデータオブジェクトを取得することができる。

IDirectXFileEnumObjectインターフェイスでは、次のメソッドが用意されている。

IDirectXFileEnumObject::GetDataObjectById

IDirectXFileEnumObject

指定したGUIDを持つデータオブジェクトを取得する。

構文

HRESULT GetDataObjectById(
  REFGUID rguid,
  LPDIRECTXFILEDATA * ppDataObj);

パラメータ

rguid
指定したGUIDへの参照。
ppDataObj
取得したIDirectXFileDataオブジェクトを受け取るポインタ。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADVALUE
DXFILEERR_NOTFOUND

IDirectXFileEnumObject::GetDataObjectByName

IDirectXFileEnumObject

指定した名前を持つデータオブジェクトを取得する。

構文

HRESULT GetDataObjectByName(
  LPCSTR szName,
  LPDIRECTXFILEDATA * ppDataObj);
  

パラメータ

szName
指定された名前へのポインタ。
ppDataObj
取得したIDirectXFileDataオブジェクトを受け取るポインタ。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADVALUE
DXFILEERR_NOTFOUND

IDirectXFileEnumObject::GetNextDataObject

IDirectXFileEnumObject

DirectXファイルのトップレベルの次のオブジェクトを取得する。トップレベルのオブジェクトは常にデータオブジェクトである。データ参照オブジェクトとバイナリオブジェクトは、データオブジェクトの子にしかなれない。

構文

HRESULT GetNextDataObject(
  LPDIRECTXFILEDATA * ppDataObj);
  

パラメータ

ppDataObj
取得したIDirectXFileDataオブジェクトを受け取るポインタ。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADVALUE
DXFILEERR_NOMOREOBJECTS

IDirectXFileObject

IDirectXFileObjectインターフェイスは、DirectXファイルオブジェクトの基本インターフェイスである。IDirectXFileDataIDirectXFileDataReference、およびIDirectXFileBinaryインターフェイスは、すべてこのインターフェイスから継承される。

IDirectXFileObjectインターフェイスでは、次のメソッドが用意されている。

IDirectXFileObject::GetId

IDirectXFileObject

DirectXファイルオブジェクトを識別するGUIDへのポインタを取得する。

構文

HRESULT GetId (LPGUID pGuid)

パラメータ

pGuid
オブジェクトのIDを受け取るGUIDへのポインタ。オブジェクトがIDを持っていない場合、この関数はGUIDにNULL GUIDを設定する。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADVALUE

IDirectXFileObject::GetName

IDirectXFileObject

DirectXファイルオブジェクトの名前へのポインタを取得する。

構文

HRESULT GetName (LPSTR pstrNameBuf, LPDWORD pdwBufLen)

パラメータ

pstrNameBuf
DirectXファイルオブジェクトの名前をコピーするバッファへのポインタ。バッファ長のみが必要な場合は、NULLに設定する。
pdwBufLen
pstrNameBufが指すバッファの長さを指定するDWORDへのポインタ。pstrNameBufがNULLであっても、pdwBufLenはオブジェクト名を保持するために必要なバッファ長に変更される。どちらの場合でも、pdwBufLenの元の値がオブジェクト名を保持するために必要な長さに足りないときには、関数はDXFILEERR_BADVALUEを返す。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADALLOC

IDirectXFileSaveObject

IDirectXFileSaveObjectインターフェイスにより、データオブジェクトを作成し、テンプレートとデータオブジェクトを保存することができる。IDirectXFile::CreateSaveObjectを使用して、このオブジェクトのインスタンスを作成する。次に、SaveTemplatesを使用して、テンプレートを保存する。データオブジェクトの作成には、CreateDataObjectを使用し、データの保存にはSaveDataを使用する。

必ずしもすべてのファイルにテンプレートが必要なわけではない。たとえば、すべてのDirectXファイルにそれぞれテンプレートを複製するのではなく、1つのDirectXファイルにテンプレートすべてを置くこともできる。

IDirectXFileSaveObjectインターフェイスでは、次のメソッドが用意されている。

IDirectXFileSaveObject::CreateDataObject

IDirectXFileSaveObject

データオブジェクトを作成する。

構文

HRESULT CreateDataObject(
  REFGUID rguidTemplate,
  LPCSTR szName,
  const GUID * pguid,
  DWORD cbSize,
  LPVOID pvData,
  LPDIRECTXFILEDATA * ppDataObj);
  

パラメータ

rguidTemplate
データオブジェクトのテンプレートを表すGUID。
szName
データオブジェクトの名前へのポインタ。オプションで、オブジェクトが名前を持っていない場合は、NULLを指定する。このオブジェクトをデータ参照オブジェクトにより参照するには、szNameまたはpguidパラメータの、少なくともどちらか1つは非NULLでなければならない。
pguid
データオブジェクトを表すGUIDへのポインタ。オプションで、オブジェクトがGUIDを持っていない場合は、NULLを指定する。このオブジェクトをデータ参照オブジェクトにより参照するには、szNameまたはpguidパラメータの、少なくともどちらか1つは非NULLでなければならない。
cbSize
データオブジェクトのサイズ。単位はバイト。
pvData
要求されたメンバのデータすべてを格納するバッファへのポインタ。
ppDataObj
作成されたIDirectXFileDataオブジェクトを受け取るポインタのアドレス。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADALLOC
DXFILEERR_BADVALUE

注意

SaveTemplatesメソッドを使用してテンプレートを保存してから、このメソッドで作成したデータを保存する。作成したデータは、SaveDataメソッドを使って保存する。オプションデータを保存する必要があるときは、このメソッドの後、SaveDataの前に、IDirectXFileData::AddDataObjectメソッドを使用する。オブジェクトに子オブジェクトがあるときは、SaveDataを呼び出す前に子オブジェクトを追加する。

IDirectXFileSaveObject::SaveData

IDirectXFileSaveObject

データオブジェクトとその子オブジェクトを、DirectXファイルに保存する。

構文

HRESULT SaveData(
  LPDIRECTXFILEDATA pDataObj);
  

パラメータ

pDataObj
保存するIDirectXFileDataオブジェクトへのポインタ。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADARRAYSIZE
DXFILEERR_BADVALUE

IDirectXFileSaveObject::SaveTemplates

IDirectXFileSaveObject

テンプレートをDirectXファイルに保存する。

構文

HRESULT SaveTemplates(
  DWORD cTemplates,
  const GUID ** ppguidTemplates);
  

パラメータ

cTemplates
保存するテンプレートの総数。
ppguidTemplates
保存するすべてのテンプレートに対するGUIDの配列へのポインタのアドレス。

戻り値

次の値のうち1つを返す。
DXFILE_OK
DXFILEERR_BADVALUE

注意

次のコードは、SaveTemplatesの呼び出し例と、ppuuidが指す配列の内容の例である。

IDirectXFileSaveObject * pDXFileSaveObject;

const GUID *aIds[] = {
    &DXFILEOBJ_SimpleData,
    &DXFILEOBJ_ArrayData,
    &DXFILEOBJ_RestrictedData};

hr = pDXFileSaveObject->SaveTemplates(3, aIds);

このメソッドでテンプレートを保存した後、IDirectXFileSaveObject::CreateDataObjectメソッドを使用してデータオブジェクトを作成する。

データ型

DirectXファイルのインターフェイスでは、次の定数と構造体を使用する。

DXFILEFORMAT定数

IDirectXFile::CreateSaveObjectメソッドで使用される値を指定し、DirectXファイルを保存するときに使用するフォーマットを示す。

構文

typedef DWORD DXFILEFORMAT;
#define DXFILEFORMAT_BINARY     0
#define DXFILEFORMAT_TEXT       1
#define DXFILEFORMAT_COMPRESSED 2

DXFILEFORMAT_BINARY
バイナリファイルを示す。
DXFILEFORMAT_TEXT
テキストファイルを示す。
DXFILEFORMAT_COMPRESSED
圧縮ファイルを示す。
ファイルフォーマットのデフォルト値は、DXFILEFORMAT_BINARYである。ファイルフォーマットの値を論理ORで結合して、圧縮テキストファイルや圧縮バイナリファイルを作成することもできる。ファイルがバイナリ (0) とテキスト (1) の両方として指定されている場合、その値はテキストファイルフォーマットの値 (0 + 1 = 1) と区別がつかないので、テキストファイルとして保存される。ファイルフォーマットとしてテキストと圧縮を指定すると、ファイルはまずテキストとして書き込まれてから圧縮される。ただし、圧縮テキストファイルはバイナリテキストファイルほど効率が良くないので、多くの場合、バイナリで圧縮を指定する。フォーマットを指定せずにファイルを圧縮するよう設定すると、バイナリで圧縮されたファイルになる。

DXFILELOADMEMORY構造体

アプリケーションがIDirectXFile::CreateEnumObjectメソッドを使用してDXFILELOAD_FROMMEMORYを指定するとき、ロードするリソースを識別する。

構文

typedef struct _DXFILELOADMEMORY {
    LPVOID lpMemory;
    DWORD dSize;
}DXFILELOADMEMORY, *LPDXFILELOADMEMORY;

メンバ

lpMemory
ロードするメモリブロックへのポインタ。
dSize
ロードするメモリブロックのサイズ。単位はバイト。

DXFILELOADOPTIONS定数

IDirectXFile::CreateEnumObjectメソッドで使用する値を指定し、ファイルデータのソースを示す。

構文

typedef DWORD DXFILELOADOPTIONS;
#define DXFILELOAD_FROMFILE  0x00L
#define DXFILELOAD_FROMRESOURCE 0x01L
#define DXFILELOAD_FROMMEMORY 0x02L
#define DXFILELOAD_FROMSTREAM 0x04L
#define DXFILELOAD_FROMURL 0x08L

DXFILELOAD_FROMFILE
ファイルから読み出されたデータを示す。
DXFILELOAD_FROMRESOURCE
リソースから読み出されたデータを示す。
DXFILELOAD_FROMMEMORY
メモリから読み出されたデータを示す。
DXFILELOAD_FROMSTREAM
ストリームから読み出されたデータを示す。現在はサポートされていない。
DXFILELOAD_FROMURL
URL (Uniform Resource Locator) から読み出されたデータを示す。

DXFILELOADRESOURCE構造体

アプリケーションがIDirectXFile::CreateEnumObjectメソッドを使用してDXFILELOAD_FROMRESOURCEを指定するとき、ロードするリソースを識別する。

構文

typedef struct _DXFILELOADRESOURCE {
    HMODULE hModule;
    LPCTSTR lpName;
    LPCTSTR lpType;
}DXFILELOADRESOURCE, *LPDXFILELOADRESOURCE;

メンバ

hModule
ロードするリソースを含むモジュールのハンドル。このメンバがNULLのときは、使用する実行ファイルにリソースをアタッチしなければならない。
lpName
ロードするリソースの名前。たとえば、リソースがメッシュのときは、このメンバはメッシュファイルの名前を指定する。
lpType
リソースを識別するユーザ定義のタイプ。

戻り値

DirectXファイルのCOM (Component Object Model) インターフェイスのメソッドは、標準のCOM戻り値のほかに次の値を返すことがある。

DXFILE_OK
コマンドは正常に完了した。DD_OKと同じ。
DXFILEERR_BADVALUE
パラメータが無効である。
DXFILEERR_BADTYPE
オブジェクトタイプが無効である。
DXFILEERR_BADALLOC
メモリ割り当てに失敗した。
DXFILEERR_NOTFOUND
オブジェクトが見つからない。
DXFILEERR_FILENOTFOUND
ファイルが見つからない。
DXFILEERR_RESOURCENOTFOUND
リソースが見つからない。
DXFILEERR_URLNOTFOUND
URLが見つからない。
DXFILEERR_BADRESOURCE
リソースが無効である。
DXFILEERR_BADFILETYPE
ファイルがDirectXファイルではない。
DXFILEERR_BADFILEVERSION
ファイルのバージョンが無効である。
DXFILEERR_BADFILEFLOATSIZE
浮動小数点のサイズが無効である。
DXFILEERR_BADFILE
ファイルが無効である。
DXFILEERR_PARSEERROR
ファイルが構文解析できない。
DXFILEERR_BADARRAYSIZE
配列のサイズが無効である。
DXFILEERR_BADDATAREFERENCE
データ参照が無効である。
DXFILEERR_NOMOREOBJECTS
オブジェクトは既に、すべて列挙されている。
DXFILEERR_NOMOREDATA
これ以降のデータは取得できない。

トップに戻る トップに戻る
© 1999 Microsoft and/or its suppliers. All rights reserved. Terms of Use.