ホーム › Media.Multimedia › WAVEOPENDESC
WAVEOPENDESC
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| hWave | HWAVE | 8/4 | +0 | +0 | オープンされた波形デバイスのハンドル(HWAVE)。 |
| lpFormat | WAVEFORMAT* | 8/4 | +8 | +4 | 波形データの形式を記述するWAVEFORMAT構造体へのポインタ。 |
| dwCallback | UINT_PTR | 8/4 | +16 | +8 | 再生/録音通知を受け取るコールバック関数/ウィンドウ/イベントのハンドル。 |
| dwInstance | UINT_PTR | 8/4 | +24 | +12 | コールバックへ渡されるユーザ定義のインスタンスデータ。 |
| uMappedDeviceID | DWORD | 4 | +32 | +16 | 波形マッパによって割り当てられた実デバイスのID。 |
| dnDevNode | UINT_PTR | 8/4 | +36 | +20 | デバイスのデバイスノード(プラグアンドプレイ識別子)。 |
各言語での定義
#include <windows.h>
// WAVEOPENDESC (x64 44 / x86 24 バイト)
#pragma pack(push, 1)
typedef struct WAVEOPENDESC {
HWAVE hWave;
WAVEFORMAT* lpFormat;
UINT_PTR dwCallback;
UINT_PTR dwInstance;
DWORD uMappedDeviceID;
UINT_PTR dnDevNode;
} WAVEOPENDESC;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct WAVEOPENDESC
{
public IntPtr hWave;
public IntPtr lpFormat;
public UIntPtr dwCallback;
public UIntPtr dwInstance;
public uint uMappedDeviceID;
public UIntPtr dnDevNode;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure WAVEOPENDESC
Public hWave As IntPtr
Public lpFormat As IntPtr
Public dwCallback As UIntPtr
Public dwInstance As UIntPtr
Public uMappedDeviceID As UInteger
Public dnDevNode As UIntPtr
End Structureimport ctypes
from ctypes import wintypes
class WAVEOPENDESC(ctypes.Structure):
_pack_ = 1
_fields_ = [
("hWave", ctypes.c_void_p),
("lpFormat", ctypes.c_void_p),
("dwCallback", ctypes.c_size_t),
("dwInstance", ctypes.c_size_t),
("uMappedDeviceID", wintypes.DWORD),
("dnDevNode", ctypes.c_size_t),
]#[repr(C, packed(1))]
pub struct WAVEOPENDESC {
pub hWave: *mut core::ffi::c_void,
pub lpFormat: *mut core::ffi::c_void,
pub dwCallback: usize,
pub dwInstance: usize,
pub uMappedDeviceID: u32,
pub dnDevNode: usize,
}import "golang.org/x/sys/windows"
type WAVEOPENDESC struct {
hWave uintptr
lpFormat uintptr
dwCallback uintptr
dwInstance uintptr
uMappedDeviceID uint32
dnDevNode uintptr
}type
WAVEOPENDESC = packed record
hWave: Pointer;
lpFormat: Pointer;
dwCallback: NativeUInt;
dwInstance: NativeUInt;
uMappedDeviceID: DWORD;
dnDevNode: NativeUInt;
end;const WAVEOPENDESC = extern struct {
hWave: ?*anyopaque,
lpFormat: ?*anyopaque,
dwCallback: usize,
dwInstance: usize,
uMappedDeviceID: u32,
dnDevNode: usize,
};type
WAVEOPENDESC {.packed.} = object
hWave: pointer
lpFormat: pointer
dwCallback: uint
dwInstance: uint
uMappedDeviceID: uint32
dnDevNode: uintalign(1)
struct WAVEOPENDESC
{
void* hWave;
void* lpFormat;
size_t dwCallback;
size_t dwInstance;
uint uMappedDeviceID;
size_t dnDevNode;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WAVEOPENDESC サイズ: 24 バイト(x86)
dim st, 6 ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; hWave : HWAVE (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; lpFormat : WAVEFORMAT* (+4, 4byte) varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; dwCallback : UINT_PTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwInstance : UINT_PTR (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; uMappedDeviceID : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dnDevNode : UINT_PTR (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WAVEOPENDESC サイズ: 44 バイト(x64)
dim st, 11 ; 4byte整数×11(構造体サイズ 44 / 4 切り上げ)
; hWave : HWAVE (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; lpFormat : WAVEFORMAT* (+8, 8byte) varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; dwCallback : UINT_PTR (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; dwInstance : UINT_PTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; uMappedDeviceID : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; dnDevNode : UINT_PTR (+36, 8byte) qpoke st,36,値 / qpeek(st,36) ※IronHSPのみ。3.7/3.8は lpoke st,36,下位 : lpoke st,40,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WAVEOPENDESC, pack=1
#field intptr hWave
#field intptr lpFormat
#field intptr dwCallback
#field intptr dwInstance
#field int uMappedDeviceID
#field intptr dnDevNode
#endstruct
stdim st, WAVEOPENDESC ; NSTRUCT 変数を確保
st->dwCallback = 100
mes "dwCallback=" + st->dwCallback