DirectXファイルを読み込もうとしているのですが
DXFILEERR_BADVALUEが返って来てしまいます。
パラメーターが無効とのことですが意味がさっぱりです。
d3dxof.sbp [ここをクリックすると内容が表示されます]
コード: 全て選択
Declare Function DirectXFileCreate Lib "d3dxof.dll" (
lplpDirectXFile As *LPDIRECTXFILE
) As Long
'IDirectXFile インターフェイス
Class IDirectXFile : Inherits IUnknown
Public
'列挙オブジェクトを作成します。
Virtual Function CreateEnumObject(
pvSource As VoidPtr,
dwLoadOptions As DXFILELOADOPTIONS,
ppEnumObj As *LPDIRECTXFILEENUMOBJECT
) As Long
'保存オブジェクトを作成します。
Virtual Function CreateSaveObject(
szFileName As LPCSTR,
dwFileFormat As DXFILEFORMAT,
ppSaveObj As *LPDIRECTXFILESAVEOBJECT
) As Long
'カスタム テンプレートを登録します。
Virtual Function RegisterTemplates(
pvData As VoidPtr,
cbSize As DWord
) As Long
End Class
TypeDef LPDIRECTXFILE =*IDirectXFile
'DXFILEFORMAT
Const DXFILEFORMAT_BINARY =0 'バイナリ ファイル。
Const DXFILEFORMAT_TEXT =1 'テキスト ファイル。
Const DXFILEFORMAT_COMPRESSED =2 '圧縮ファイル。
TypeDef DXFILEFORMAT =DWord
'DXFILELOADOPTIONS
Const DXFILELOAD_FROMFILE =&h00 'ファイルからファイルをロードします。
Const DXFILELOAD_FROMRESOURCE =&h01 'リソースからファイルをロードします。
Const DXFILELOAD_FROMMEMORY =&h02 'メモリからファイルをロードします。
Const DXFILELOAD_FROMSTREAM =&h04 'ストリームからファイルをロードします。
Const DXFILELOAD_FROMURL =&h08 'URL からファイルをロードします。
TypeDef DXFILELOADOPTIONS =DWord
'IDirectXFileEnumObject インターフェイス
Class IDirectXFileEnumObject : Inherits IUnknown
Public
'指定されたグローバル一意識別子 (GUID) を持つデータ オブジェクトを取得します。
Virtual Function GetDataObjectById(
rguid As REFGUID,
ppDataObj As *LPDIRECTXFILEDATA
) As Long
'指定された名前を持つデータ オブジェクトを取得します。
Virtual Function GetDataObjectByName(
szName As LPCSTR,
ppDataObj As *LPDIRECTXFILEDATA
) As Long
'Microsoft DirectX ファイルにある次の最上位レベル オブジェクトを取得します。
Virtual Function GetNextDataObject(
ppDataObj As *LPDIRECTXFILEDATA
) As Long
End Class
TypeDef LPDIRECTXFILEENUMOBJECT =*IDirectXFileEnumObject
'IDirectXFileSaveObject インターフェイス
Class IDirectXFileSaveObject : Inherits IUnknown
Public
'データ オブジェクトを作成します。
Virtual Function CreateDataObject(
rguidTemplate As REFGUID,
szName As LPCSTR,
pguid As *GUID,
cbSize As DWord,
pvData As VoidPtr,
ppDataObj As *LPDIRECTXFILEDATA
) As Long
'データ オブジェクトとその子を Microsoft DirectX ファイルに保存します。
Virtual Function SaveData(
pDataObj As LPDIRECTXFILEDATA
) As Long
'Microsoft DirectX ファイルにテンプレートを保存します。
Virtual Function SaveTemplates(
cTemplates As DWord,
ppguidTemplates As **GUID
) As Long
End Class
TypeDef LPDIRECTXFILESAVEOBJECT =*IDirectXFileSaveObject
TypeDef REFGUID =DWord
TypeDef REFIID =DWord
'IDirectXFileData インターフェイス
Class IDirectXFileData : Inherits IDirectXFileObject
Public
'バイナリ オブジェクトを作成し、子オブジェクトとして追加します。
Virtual Function AddBinaryObject(
szName As LPCSTR,
pguid As *GUID,
szMimeType As LPCSTR,
pvData As VoidPtr,
cbSize As DWord
) As Long
'子オブジェクトとしてデータ オブジェクトを追加します。
Virtual Function AddDataObject(
pDataObj As LPDIRECTXFILEDATA
) As Long
'データ参照オブジェクトを作成し、子オブジェクトとして追加します。
Virtual Function AddDataReference(
szRef As LPCSTR,
pguidRef As *GUID
) As Long
'オブジェクトのメンバの 1 つ、またはすべてのメンバのデータを取得します。
Virtual Function GetData(
szMember As LPCSTR,
pcbSize As DWord,
ppvData As *VoidPtr
) As Long
'DirectX ファイル中の次の子データ オブジェクト、データ参照オブジェクト、またはバイナリ オブジェクトを取得します。
Virtual Function GetNextObject(
ppChildObj As *LPDIRECTXFILEOBJECT
) As Long
'オブジェクトのテンプレートの GUID を取得します。
Virtual Function GetType(
ppguid As **GUID
) As Long
End Class
TypeDef LPDIRECTXFILEDATA =*IDirectXFileData
TypeDef LPGUID =*GUID
TypeDef LPDWORD =*DWord
'IDirectXFileObject インターフェイス
Class IDirectXFileObject : Inherits IUnknown
Public
'Microsoft DirectX ファイル オブジェクトを識別するグローバル一意識別子 (GUID) へのポインタを取得します。
Virtual Function GetId(
pGuid As LPGUID
) As Long
'Microsoft DirectX ファイル オブジェクト名へのポインタを取得します。
Virtual Function GetName(
pstrNameBuf As LPSTR,
pdwBufLen As LPDWORD
) As Long
End Class
TypeDef LPDIRECTXFILEOBJECT =*IDirectXFileObject
'IDirectXFileDataReference インターフェイス
Class IDirectXFileDataReference : Inherits IDirectXFileObject
Public
'データ参照を置換します。
Virtual Function Resolve(
ppDataObj As *LPDIRECTXFILEDATA
) As Long
End Class
TypeDef LPDIRECTXFILEDATAREFERENCE =*IDirectXFileDataReference
'IDirectXFileBinary インターフェイス
Class IDirectXFileBinary : Inherits IDirectXFileObject
Public
'バイナリ データの MIME (Multipurpose Internet Mail Extensions) 型を取得します。
Virtual Function GetMimeType(
pszMimeType As *LPCSTR
) As Long
'バイナリ データのサイズを取得します。
Virtual Function GetSize(
pcbSize As *DWord
) As Long
'バイナリ データを読み取ります。
Virtual Function Read(
pvData As VoidPtr,
cbSize As DWord,
pcbRead As LPDWORD
) As Long
End Class
TypeDef LPDIRECTXFILEBINARY =*IDirectXFileBinary
'DXFILELOADMEMORY 構造体
'メモリ データを識別します。
Type _DXFILELOADMEMORY
pMemory As VoidPtr 'ロードするメモリ ブロックへのポインタ
dSize As DWord 'ロードするメモリ ブロックのサイズ (バイト単位)
EndType
TypeDef DXFILELOADMEMORY =_DXFILELOADMEMORY
TypeDef LPDXFILELOADMEMORY =*DXFILELOADMEMORY
Main.abp [ここをクリックすると内容が表示されます]
コード: 全て選択
Dim pDXFile As LPDIRECTXFILE,hr As DWord
Dim pEnumObj As LPDIRECTXFILEENUMOBJECT
Dim pDataObj As LPDIRECTXFILEDATA
Dim lpTemplates As VoidPtr,lpData As VoidPtr
Dim dxflm As DXFILELOADMEMORY
'DirectXFileCreate関数からIDirectXFileインターフェイスを取得
hr=DirectXFileCreate(VarPtr(pDXFile))
If hr Then
Else
lpTemplates="xof 0303txt 0032template Header {<3D82AB43-62DA-11cf-AB39-0020AF71E433>WORD major;WORD minor;DWORD flags;}"
'テンプレート登録
hr=pDXFile->RegisterTemplates(lpTemplates,lstrlen(lpTemplates))
lpData="xof 0303txt 0032Header{1;0;1;}"
dxflm.pMemory=lpData
dxflm.dSize=lstrlen(lpData)
'列挙オブジェクト作成
hr=pDXFile->CreateEnumObject(
VarPtr(dxflm),
DXFILELOAD_FROMMEMORY,
VarPtr(pEnumObj)
)
If hr Then
Else
hr=pEnumObj->GetNextDataObject(VarPtr(pDataObj))
Select Case hr
Case &h88760353'DXFILEERR_BADVALUE
OutputDebugString("DXFILEERR_BADVALUE")
Case &h88760357'DXFILEERR_NOTFOUND
OutputDebugString("DXFILEERR_NOTFOUND")
End Select
End If
End If
If pDataObj Then pDataObj->Release()
If pEnumObj Then pEnumObj->Release()
If pDXFile Then pDXFile->Release()
End