ホーム › Media.Audio › ACMSTREAMHEADER
ACMSTREAMHEADER
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cbStruct | DWORD | 4 | +0 | +0 | ACMSTREAMHEADER 構造体のサイズ (バイト単位)。このメンバーは、アプリケーションがこの構造体を使用する ACM ストリーム関数を呼び出す前に初期化しておく必要があります。このメンバーに指定するサイズは、基本の ACMSTREAMHEADER 構造体を格納できる大きさでなければなりません。 | ||||||||
| fdwStatus | DWORD | 4 | +4 | +4 | 変換バッファーに関する情報を示すフラグ。このメンバーは、アプリケーションが acmStreamPrepareHeader 関数を呼び出す前に 0 に初期化しておく必要があり、ストリームヘッダーが準備済みの状態である間はアプリケーションが変更してはなりません。
| ||||||||
| dwUser | UINT_PTR | 8/4 | +8 | +8 | ユーザーデータ。アプリケーションが指定する任意のインスタンスデータを格納できます。 | ||||||||
| pbSrc | BYTE* | 8/4 | +16 | +12 | 変換元バッファーへのポインター。このポインターは、ストリームヘッダーが準備済みの状態である間、常に同じ場所を指していなければなりません。アプリケーションが変換元の場所を変更する必要がある場合は、ヘッダーの準備を解除し、別の場所を指定して再度準備する必要があります。 | ||||||||
| cbSrcLength | DWORD | 4 | +24 | +16 | pbSrc が指す変換元バッファーの長さ (バイト単位)。ヘッダーを準備するときは、このメンバーに変換元バッファーで使用する最大サイズを指定しなければなりません。変換は、準備時に指定した元のサイズ以下の変換元長に対して実行できます。ただし、アプリケーションがヘッダーの準備を解除するときは、このメンバーを元のサイズに戻さなければなりません。 | ||||||||
| cbSrcLengthUsed | DWORD | 4 | +28 | +20 | 変換に使用されたデータ量 (バイト単位)。このメンバーは変換が完了するまで有効ではありません。この値は cbSrcLength 以下になります。アプリケーションは、変換ストリームの次の変換元データへ進む際に cbSrcLengthUsed メンバーを使用する必要があります。 | ||||||||
| dwSrcUser | UINT_PTR | 8/4 | +32 | +24 | ユーザーデータ。アプリケーションが指定する任意のインスタンスデータを格納できます。 | ||||||||
| pbDst | BYTE* | 8/4 | +40 | +28 | 変換先バッファーへのポインター。このポインターは、ストリームヘッダーが準備済みの状態である間、常に同じ場所を指していなければなりません。アプリケーションが変換先の場所を変更する必要がある場合は、ヘッダーの準備を解除し、別の場所を指定して再度準備する必要があります。 | ||||||||
| cbDstLength | DWORD | 4 | +48 | +32 | pbDst が指す変換先バッファーの長さ (バイト単位)。ヘッダーを準備するときは、このメンバーに変換先バッファーで使用する最大サイズを指定しなければなりません。 | ||||||||
| cbDstLengthUsed | DWORD | 4 | +52 | +36 | 変換によって返されたデータ量 (バイト単位)。このメンバーは変換が完了するまで有効ではありません。この値は cbDstLength 以下になります。アプリケーションは、変換ストリームの次の変換先の場所へ進む際に cbDstLengthUsed メンバーを使用する必要があります。 | ||||||||
| dwDstUser | UINT_PTR | 8/4 | +56 | +40 | ユーザーデータ。アプリケーションが指定する任意のインスタンスデータを格納できます。 | ||||||||
| dwReservedDriver | DWORD | 40 | +64 | +44 | 予約済みです。使用しないでください。このメンバーはアプリケーションによる初期化を必要とせず、ヘッダーが準備済みの状態である間は決して変更してはなりません。 |
公式ドキュメント
ACMSTREAMHEADER 構造体は、変換ストリームにおける ACM の変換元バッファーと変換先バッファーの組を識別するために使用するヘッダーを定義します。
解説(Remarks)
ACMSTREAMHEADER 構造体を変換に使用する前に、acmStreamPrepareHeader 関数を使用して準備しておく必要があります。アプリケーションは、ACMSTREAMHEADER 構造体の使用を終えたら、変換元バッファーと変換先バッファーを解放する前に acmStreamUnprepareHeader 関数を呼び出さなければなりません。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// ACMSTREAMHEADER (x64 104 / x86 84 バイト)
#pragma pack(push, 1)
typedef struct ACMSTREAMHEADER {
DWORD cbStruct;
DWORD fdwStatus;
UINT_PTR dwUser;
BYTE* pbSrc;
DWORD cbSrcLength;
DWORD cbSrcLengthUsed;
UINT_PTR dwSrcUser;
BYTE* pbDst;
DWORD cbDstLength;
DWORD cbDstLengthUsed;
UINT_PTR dwDstUser;
DWORD dwReservedDriver[10];
} ACMSTREAMHEADER;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct ACMSTREAMHEADER
{
public uint cbStruct;
public uint fdwStatus;
public UIntPtr dwUser;
public IntPtr pbSrc;
public uint cbSrcLength;
public uint cbSrcLengthUsed;
public UIntPtr dwSrcUser;
public IntPtr pbDst;
public uint cbDstLength;
public uint cbDstLengthUsed;
public UIntPtr dwDstUser;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public uint[] dwReservedDriver;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure ACMSTREAMHEADER
Public cbStruct As UInteger
Public fdwStatus As UInteger
Public dwUser As UIntPtr
Public pbSrc As IntPtr
Public cbSrcLength As UInteger
Public cbSrcLengthUsed As UInteger
Public dwSrcUser As UIntPtr
Public pbDst As IntPtr
Public cbDstLength As UInteger
Public cbDstLengthUsed As UInteger
Public dwDstUser As UIntPtr
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)> Public dwReservedDriver() As UInteger
End Structureimport ctypes
from ctypes import wintypes
class ACMSTREAMHEADER(ctypes.Structure):
_pack_ = 1
_fields_ = [
("cbStruct", wintypes.DWORD),
("fdwStatus", wintypes.DWORD),
("dwUser", ctypes.c_size_t),
("pbSrc", ctypes.c_void_p),
("cbSrcLength", wintypes.DWORD),
("cbSrcLengthUsed", wintypes.DWORD),
("dwSrcUser", ctypes.c_size_t),
("pbDst", ctypes.c_void_p),
("cbDstLength", wintypes.DWORD),
("cbDstLengthUsed", wintypes.DWORD),
("dwDstUser", ctypes.c_size_t),
("dwReservedDriver", wintypes.DWORD * 10),
]#[repr(C, packed(1))]
pub struct ACMSTREAMHEADER {
pub cbStruct: u32,
pub fdwStatus: u32,
pub dwUser: usize,
pub pbSrc: *mut core::ffi::c_void,
pub cbSrcLength: u32,
pub cbSrcLengthUsed: u32,
pub dwSrcUser: usize,
pub pbDst: *mut core::ffi::c_void,
pub cbDstLength: u32,
pub cbDstLengthUsed: u32,
pub dwDstUser: usize,
pub dwReservedDriver: [u32; 10],
}import "golang.org/x/sys/windows"
type ACMSTREAMHEADER struct {
cbStruct uint32
fdwStatus uint32
dwUser uintptr
pbSrc uintptr
cbSrcLength uint32
cbSrcLengthUsed uint32
dwSrcUser uintptr
pbDst uintptr
cbDstLength uint32
cbDstLengthUsed uint32
dwDstUser uintptr
dwReservedDriver [10]uint32
}type
ACMSTREAMHEADER = packed record
cbStruct: DWORD;
fdwStatus: DWORD;
dwUser: NativeUInt;
pbSrc: Pointer;
cbSrcLength: DWORD;
cbSrcLengthUsed: DWORD;
dwSrcUser: NativeUInt;
pbDst: Pointer;
cbDstLength: DWORD;
cbDstLengthUsed: DWORD;
dwDstUser: NativeUInt;
dwReservedDriver: array[0..9] of DWORD;
end;const ACMSTREAMHEADER = extern struct {
cbStruct: u32,
fdwStatus: u32,
dwUser: usize,
pbSrc: ?*anyopaque,
cbSrcLength: u32,
cbSrcLengthUsed: u32,
dwSrcUser: usize,
pbDst: ?*anyopaque,
cbDstLength: u32,
cbDstLengthUsed: u32,
dwDstUser: usize,
dwReservedDriver: [10]u32,
};type
ACMSTREAMHEADER {.packed.} = object
cbStruct: uint32
fdwStatus: uint32
dwUser: uint
pbSrc: pointer
cbSrcLength: uint32
cbSrcLengthUsed: uint32
dwSrcUser: uint
pbDst: pointer
cbDstLength: uint32
cbDstLengthUsed: uint32
dwDstUser: uint
dwReservedDriver: array[10, uint32]align(1)
struct ACMSTREAMHEADER
{
uint cbStruct;
uint fdwStatus;
size_t dwUser;
void* pbSrc;
uint cbSrcLength;
uint cbSrcLengthUsed;
size_t dwSrcUser;
void* pbDst;
uint cbDstLength;
uint cbDstLengthUsed;
size_t dwDstUser;
uint[10] dwReservedDriver;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; ACMSTREAMHEADER サイズ: 84 バイト(x86)
dim st, 21 ; 4byte整数×21(構造体サイズ 84 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; fdwStatus : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwUser : UINT_PTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pbSrc : BYTE* (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; cbSrcLength : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; cbSrcLengthUsed : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwSrcUser : UINT_PTR (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; pbDst : BYTE* (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; cbDstLength : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; cbDstLengthUsed : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; dwDstUser : UINT_PTR (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; dwReservedDriver : DWORD (+44, 40byte) varptr(st)+44 を基点に操作(40byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; ACMSTREAMHEADER サイズ: 104 バイト(x64)
dim st, 26 ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; fdwStatus : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwUser : UINT_PTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pbSrc : BYTE* (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; cbSrcLength : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; cbSrcLengthUsed : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; dwSrcUser : UINT_PTR (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; pbDst : BYTE* (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; cbDstLength : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; cbDstLengthUsed : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; dwDstUser : UINT_PTR (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; dwReservedDriver : DWORD (+64, 40byte) varptr(st)+64 を基点に操作(40byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global ACMSTREAMHEADER, pack=1
#field int cbStruct
#field int fdwStatus
#field intptr dwUser
#field intptr pbSrc
#field int cbSrcLength
#field int cbSrcLengthUsed
#field intptr dwSrcUser
#field intptr pbDst
#field int cbDstLength
#field int cbDstLengthUsed
#field intptr dwDstUser
#field int dwReservedDriver 10
#endstruct
stdim st, ACMSTREAMHEADER ; NSTRUCT 変数を確保
st->cbStruct = 100
mes "cbStruct=" + st->cbStruct