Win32 API 日本語リファレンス
ホームSystem.RemoteDesktop › AE_CURRENT_POSITION

AE_CURRENT_POSITION

構造体
サイズx64: 40 バイト / x86: 40 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
u64DevicePositionULONGLONG8+0+0オーディオデバイス上の現在位置。フレーム数で表す。
u64StreamPositionULONGLONG8+8+8ストリーム上の現在位置。フレーム数で表す。
u64PaddingFramesULONGLONG8+16+16パディングとして埋められたフレーム数。
hnsQPCPositionLONGLONG8+24+24位置取得時のQPCタイムスタンプ。100ns単位で表す。
f32FramesPerSecondFLOAT4+32+321秒あたりのフレーム数(サンプルレート)。
FlagAE_POSITION_FLAGS4+36+36位置情報の有効性を示すフラグの列挙値。

各言語での定義

#include <windows.h>

// AE_CURRENT_POSITION  (x64 40 / x86 40 バイト)
typedef struct AE_CURRENT_POSITION {
    ULONGLONG u64DevicePosition;
    ULONGLONG u64StreamPosition;
    ULONGLONG u64PaddingFrames;
    LONGLONG hnsQPCPosition;
    FLOAT f32FramesPerSecond;
    AE_POSITION_FLAGS Flag;
} AE_CURRENT_POSITION;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct AE_CURRENT_POSITION
{
    public ulong u64DevicePosition;
    public ulong u64StreamPosition;
    public ulong u64PaddingFrames;
    public long hnsQPCPosition;
    public float f32FramesPerSecond;
    public int Flag;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure AE_CURRENT_POSITION
    Public u64DevicePosition As ULong
    Public u64StreamPosition As ULong
    Public u64PaddingFrames As ULong
    Public hnsQPCPosition As Long
    Public f32FramesPerSecond As Single
    Public Flag As Integer
End Structure
import ctypes
from ctypes import wintypes

class AE_CURRENT_POSITION(ctypes.Structure):
    _fields_ = [
        ("u64DevicePosition", ctypes.c_ulonglong),
        ("u64StreamPosition", ctypes.c_ulonglong),
        ("u64PaddingFrames", ctypes.c_ulonglong),
        ("hnsQPCPosition", ctypes.c_longlong),
        ("f32FramesPerSecond", ctypes.c_float),
        ("Flag", ctypes.c_int),
    ]
#[repr(C)]
pub struct AE_CURRENT_POSITION {
    pub u64DevicePosition: u64,
    pub u64StreamPosition: u64,
    pub u64PaddingFrames: u64,
    pub hnsQPCPosition: i64,
    pub f32FramesPerSecond: f32,
    pub Flag: i32,
}
import "golang.org/x/sys/windows"

type AE_CURRENT_POSITION struct {
	u64DevicePosition uint64
	u64StreamPosition uint64
	u64PaddingFrames uint64
	hnsQPCPosition int64
	f32FramesPerSecond float32
	Flag int32
}
type
  AE_CURRENT_POSITION = record
    u64DevicePosition: UInt64;
    u64StreamPosition: UInt64;
    u64PaddingFrames: UInt64;
    hnsQPCPosition: Int64;
    f32FramesPerSecond: Single;
    Flag: Integer;
  end;
const AE_CURRENT_POSITION = extern struct {
    u64DevicePosition: u64,
    u64StreamPosition: u64,
    u64PaddingFrames: u64,
    hnsQPCPosition: i64,
    f32FramesPerSecond: f32,
    Flag: i32,
};
type
  AE_CURRENT_POSITION {.bycopy.} = object
    u64DevicePosition: uint64
    u64StreamPosition: uint64
    u64PaddingFrames: uint64
    hnsQPCPosition: int64
    f32FramesPerSecond: float32
    Flag: int32
struct AE_CURRENT_POSITION
{
    ulong u64DevicePosition;
    ulong u64StreamPosition;
    ulong u64PaddingFrames;
    long hnsQPCPosition;
    float f32FramesPerSecond;
    int Flag;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; AE_CURRENT_POSITION サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; u64DevicePosition : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; u64StreamPosition : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; u64PaddingFrames : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; hnsQPCPosition : LONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; f32FramesPerSecond : FLOAT (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; Flag : AE_POSITION_FLAGS (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global AE_CURRENT_POSITION
    #field int64 u64DevicePosition
    #field int64 u64StreamPosition
    #field int64 u64PaddingFrames
    #field int64 hnsQPCPosition
    #field float f32FramesPerSecond
    #field int Flag
#endstruct

stdim st, AE_CURRENT_POSITION        ; NSTRUCT 変数を確保
st->u64DevicePosition = 100
mes "u64DevicePosition=" + st->u64DevicePosition