ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2018年4月26日(木) 09:02

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 1 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2008年5月03日(土) 16:30 
IDirectXFileインターフェイスを使って
DirectXファイルを読み込もうとしているのですが
DXFILEERR_BADVALUEが返って来てしまいます。
パラメーターが無効とのことですが意味がさっぱりです。

[hide=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
[/hide][hide=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
[/hide]


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 1 件の記事 ] 

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[3人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by KONISHI Yohsuke