Win32 API 日本語リファレンス
ホームMedia.DirectShow.Tv › SpanningEventEmmMessage

SpanningEventEmmMessage

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

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

フィールド

フィールドサイズx64x86説明
bCAbroadcasterGroupIdBYTE1+0+0CA放送事業者グループID。EMMの対象事業者群を示す。
bMessageControlBYTE1+1+1メッセージ制御フラグ。表示制御等の属性を示す。
wServiceIdWORD2+2+2サービスID。EMMが対象とするサービスを示す。
wTableIdExtensionWORD2+4+4テーブルID拡張。EMMセクションの識別子拡張を示す。
bDeletionStatusBYTE1+6+6メッセージの削除状態。保持/削除の状態を示す。
bDisplayingDuration1BYTE1+7+7表示継続時間の第1要素(時)。BCD形式の時刻成分。
bDisplayingDuration2BYTE1+8+8表示継続時間の第2要素(分)。BCD形式の時刻成分。
bDisplayingDuration3BYTE1+9+9表示継続時間の第3要素(秒)。BCD形式の時刻成分。
bDisplayingCycleBYTE1+10+10表示周期。メッセージの繰り返し周期を示す。
bFormatVersionBYTE1+11+11メッセージ書式のバージョン。形式互換性を示す。
bDisplayPositionBYTE1+12+12表示位置。画面上の表示箇所を示す。
wMessageLengthWORD2+14+14szMessageAreaの文字数(バイト長)。メッセージ本文長を示す。
szMessageAreaWCHAR2+16+16メッセージ本文の先頭WCHAR文字。可変長文字列へのアンカー。

各言語での定義

#include <windows.h>

// SpanningEventEmmMessage  (x64 18 / x86 18 バイト)
typedef struct SpanningEventEmmMessage {
    BYTE bCAbroadcasterGroupId;
    BYTE bMessageControl;
    WORD wServiceId;
    WORD wTableIdExtension;
    BYTE bDeletionStatus;
    BYTE bDisplayingDuration1;
    BYTE bDisplayingDuration2;
    BYTE bDisplayingDuration3;
    BYTE bDisplayingCycle;
    BYTE bFormatVersion;
    BYTE bDisplayPosition;
    WORD wMessageLength;
    WCHAR szMessageArea[1];
} SpanningEventEmmMessage;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SpanningEventEmmMessage
{
    public byte bCAbroadcasterGroupId;
    public byte bMessageControl;
    public ushort wServiceId;
    public ushort wTableIdExtension;
    public byte bDeletionStatus;
    public byte bDisplayingDuration1;
    public byte bDisplayingDuration2;
    public byte bDisplayingDuration3;
    public byte bDisplayingCycle;
    public byte bFormatVersion;
    public byte bDisplayPosition;
    public ushort wMessageLength;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1)] public string szMessageArea;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SpanningEventEmmMessage
    Public bCAbroadcasterGroupId As Byte
    Public bMessageControl As Byte
    Public wServiceId As UShort
    Public wTableIdExtension As UShort
    Public bDeletionStatus As Byte
    Public bDisplayingDuration1 As Byte
    Public bDisplayingDuration2 As Byte
    Public bDisplayingDuration3 As Byte
    Public bDisplayingCycle As Byte
    Public bFormatVersion As Byte
    Public bDisplayPosition As Byte
    Public wMessageLength As UShort
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=1)> Public szMessageArea As String
End Structure
import ctypes
from ctypes import wintypes

class SpanningEventEmmMessage(ctypes.Structure):
    _fields_ = [
        ("bCAbroadcasterGroupId", ctypes.c_ubyte),
        ("bMessageControl", ctypes.c_ubyte),
        ("wServiceId", ctypes.c_ushort),
        ("wTableIdExtension", ctypes.c_ushort),
        ("bDeletionStatus", ctypes.c_ubyte),
        ("bDisplayingDuration1", ctypes.c_ubyte),
        ("bDisplayingDuration2", ctypes.c_ubyte),
        ("bDisplayingDuration3", ctypes.c_ubyte),
        ("bDisplayingCycle", ctypes.c_ubyte),
        ("bFormatVersion", ctypes.c_ubyte),
        ("bDisplayPosition", ctypes.c_ubyte),
        ("wMessageLength", ctypes.c_ushort),
        ("szMessageArea", ctypes.c_wchar * 1),
    ]
#[repr(C)]
pub struct SpanningEventEmmMessage {
    pub bCAbroadcasterGroupId: u8,
    pub bMessageControl: u8,
    pub wServiceId: u16,
    pub wTableIdExtension: u16,
    pub bDeletionStatus: u8,
    pub bDisplayingDuration1: u8,
    pub bDisplayingDuration2: u8,
    pub bDisplayingDuration3: u8,
    pub bDisplayingCycle: u8,
    pub bFormatVersion: u8,
    pub bDisplayPosition: u8,
    pub wMessageLength: u16,
    pub szMessageArea: [u16; 1],
}
import "golang.org/x/sys/windows"

type SpanningEventEmmMessage struct {
	bCAbroadcasterGroupId byte
	bMessageControl byte
	wServiceId uint16
	wTableIdExtension uint16
	bDeletionStatus byte
	bDisplayingDuration1 byte
	bDisplayingDuration2 byte
	bDisplayingDuration3 byte
	bDisplayingCycle byte
	bFormatVersion byte
	bDisplayPosition byte
	wMessageLength uint16
	szMessageArea [1]uint16
}
type
  SpanningEventEmmMessage = record
    bCAbroadcasterGroupId: Byte;
    bMessageControl: Byte;
    wServiceId: Word;
    wTableIdExtension: Word;
    bDeletionStatus: Byte;
    bDisplayingDuration1: Byte;
    bDisplayingDuration2: Byte;
    bDisplayingDuration3: Byte;
    bDisplayingCycle: Byte;
    bFormatVersion: Byte;
    bDisplayPosition: Byte;
    wMessageLength: Word;
    szMessageArea: array[0..0] of WideChar;
  end;
const SpanningEventEmmMessage = extern struct {
    bCAbroadcasterGroupId: u8,
    bMessageControl: u8,
    wServiceId: u16,
    wTableIdExtension: u16,
    bDeletionStatus: u8,
    bDisplayingDuration1: u8,
    bDisplayingDuration2: u8,
    bDisplayingDuration3: u8,
    bDisplayingCycle: u8,
    bFormatVersion: u8,
    bDisplayPosition: u8,
    wMessageLength: u16,
    szMessageArea: [1]u16,
};
type
  SpanningEventEmmMessage {.bycopy.} = object
    bCAbroadcasterGroupId: uint8
    bMessageControl: uint8
    wServiceId: uint16
    wTableIdExtension: uint16
    bDeletionStatus: uint8
    bDisplayingDuration1: uint8
    bDisplayingDuration2: uint8
    bDisplayingDuration3: uint8
    bDisplayingCycle: uint8
    bFormatVersion: uint8
    bDisplayPosition: uint8
    wMessageLength: uint16
    szMessageArea: array[1, uint16]
struct SpanningEventEmmMessage
{
    ubyte bCAbroadcasterGroupId;
    ubyte bMessageControl;
    ushort wServiceId;
    ushort wTableIdExtension;
    ubyte bDeletionStatus;
    ubyte bDisplayingDuration1;
    ubyte bDisplayingDuration2;
    ubyte bDisplayingDuration3;
    ubyte bDisplayingCycle;
    ubyte bFormatVersion;
    ubyte bDisplayPosition;
    ushort wMessageLength;
    wchar[1] szMessageArea;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SpanningEventEmmMessage サイズ: 18 バイト(x64)
dim st, 5    ; 4byte整数×5(構造体サイズ 18 / 4 切り上げ)
; bCAbroadcasterGroupId : BYTE (+0, 1byte)  poke st,0,値  /  値 = peek(st,0)
; bMessageControl : BYTE (+1, 1byte)  poke st,1,値  /  値 = peek(st,1)
; wServiceId : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; wTableIdExtension : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; bDeletionStatus : BYTE (+6, 1byte)  poke st,6,値  /  値 = peek(st,6)
; bDisplayingDuration1 : BYTE (+7, 1byte)  poke st,7,値  /  値 = peek(st,7)
; bDisplayingDuration2 : BYTE (+8, 1byte)  poke st,8,値  /  値 = peek(st,8)
; bDisplayingDuration3 : BYTE (+9, 1byte)  poke st,9,値  /  値 = peek(st,9)
; bDisplayingCycle : BYTE (+10, 1byte)  poke st,10,値  /  値 = peek(st,10)
; bFormatVersion : BYTE (+11, 1byte)  poke st,11,値  /  値 = peek(st,11)
; bDisplayPosition : BYTE (+12, 1byte)  poke st,12,値  /  値 = peek(st,12)
; wMessageLength : WORD (+14, 2byte)  wpoke st,14,値  /  値 = wpeek(st,14)
; szMessageArea : WCHAR (+16, 2byte)  varptr(st)+16 を基点に操作(2byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SpanningEventEmmMessage
    #field byte bCAbroadcasterGroupId
    #field byte bMessageControl
    #field short wServiceId
    #field short wTableIdExtension
    #field byte bDeletionStatus
    #field byte bDisplayingDuration1
    #field byte bDisplayingDuration2
    #field byte bDisplayingDuration3
    #field byte bDisplayingCycle
    #field byte bFormatVersion
    #field byte bDisplayPosition
    #field short wMessageLength
    #field wchar szMessageArea 1
#endstruct

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