Win32 API 日本語リファレンス
ホームMedia.WindowsMediaFormat › WM_READER_STATISTICS

WM_READER_STATISTICS

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

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0この構造体のサイズをバイトで示す。
dwBandwidthDWORD4+4+4現在使用中の帯域幅(bps)。
cPacketsReceivedDWORD4+8+8受信したパケットの総数。
cPacketsRecoveredDWORD4+12+12誤り訂正等で回復したパケット数。
cPacketsLostDWORD4+16+16失われた(回復できなかった)パケット数。
wQualityWORD2+20+20受信品質を百分率(0~100)で示す。

各言語での定義

#include <windows.h>

// WM_READER_STATISTICS  (x64 24 / x86 24 バイト)
typedef struct WM_READER_STATISTICS {
    DWORD cbSize;
    DWORD dwBandwidth;
    DWORD cPacketsReceived;
    DWORD cPacketsRecovered;
    DWORD cPacketsLost;
    WORD wQuality;
} WM_READER_STATISTICS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WM_READER_STATISTICS
{
    public uint cbSize;
    public uint dwBandwidth;
    public uint cPacketsReceived;
    public uint cPacketsRecovered;
    public uint cPacketsLost;
    public ushort wQuality;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WM_READER_STATISTICS
    Public cbSize As UInteger
    Public dwBandwidth As UInteger
    Public cPacketsReceived As UInteger
    Public cPacketsRecovered As UInteger
    Public cPacketsLost As UInteger
    Public wQuality As UShort
End Structure
import ctypes
from ctypes import wintypes

class WM_READER_STATISTICS(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("dwBandwidth", wintypes.DWORD),
        ("cPacketsReceived", wintypes.DWORD),
        ("cPacketsRecovered", wintypes.DWORD),
        ("cPacketsLost", wintypes.DWORD),
        ("wQuality", ctypes.c_ushort),
    ]
#[repr(C)]
pub struct WM_READER_STATISTICS {
    pub cbSize: u32,
    pub dwBandwidth: u32,
    pub cPacketsReceived: u32,
    pub cPacketsRecovered: u32,
    pub cPacketsLost: u32,
    pub wQuality: u16,
}
import "golang.org/x/sys/windows"

type WM_READER_STATISTICS struct {
	cbSize uint32
	dwBandwidth uint32
	cPacketsReceived uint32
	cPacketsRecovered uint32
	cPacketsLost uint32
	wQuality uint16
}
type
  WM_READER_STATISTICS = record
    cbSize: DWORD;
    dwBandwidth: DWORD;
    cPacketsReceived: DWORD;
    cPacketsRecovered: DWORD;
    cPacketsLost: DWORD;
    wQuality: Word;
  end;
const WM_READER_STATISTICS = extern struct {
    cbSize: u32,
    dwBandwidth: u32,
    cPacketsReceived: u32,
    cPacketsRecovered: u32,
    cPacketsLost: u32,
    wQuality: u16,
};
type
  WM_READER_STATISTICS {.bycopy.} = object
    cbSize: uint32
    dwBandwidth: uint32
    cPacketsReceived: uint32
    cPacketsRecovered: uint32
    cPacketsLost: uint32
    wQuality: uint16
struct WM_READER_STATISTICS
{
    uint cbSize;
    uint dwBandwidth;
    uint cPacketsReceived;
    uint cPacketsRecovered;
    uint cPacketsLost;
    ushort wQuality;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WM_READER_STATISTICS サイズ: 24 バイト(x64)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwBandwidth : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; cPacketsReceived : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; cPacketsRecovered : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; cPacketsLost : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; wQuality : WORD (+20, 2byte)  wpoke st,20,値  /  値 = wpeek(st,20)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WM_READER_STATISTICS
    #field int cbSize
    #field int dwBandwidth
    #field int cPacketsReceived
    #field int cPacketsRecovered
    #field int cPacketsLost
    #field short wQuality
#endstruct

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