ホーム › Media.DirectShow.Tv › SpanningEventEmmMessage
SpanningEventEmmMessage
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| bCAbroadcasterGroupId | BYTE | 1 | +0 | +0 | CA放送事業者グループID。EMMの対象事業者群を示す。 |
| bMessageControl | BYTE | 1 | +1 | +1 | メッセージ制御フラグ。表示制御等の属性を示す。 |
| wServiceId | WORD | 2 | +2 | +2 | サービスID。EMMが対象とするサービスを示す。 |
| wTableIdExtension | WORD | 2 | +4 | +4 | テーブルID拡張。EMMセクションの識別子拡張を示す。 |
| bDeletionStatus | BYTE | 1 | +6 | +6 | メッセージの削除状態。保持/削除の状態を示す。 |
| bDisplayingDuration1 | BYTE | 1 | +7 | +7 | 表示継続時間の第1要素(時)。BCD形式の時刻成分。 |
| bDisplayingDuration2 | BYTE | 1 | +8 | +8 | 表示継続時間の第2要素(分)。BCD形式の時刻成分。 |
| bDisplayingDuration3 | BYTE | 1 | +9 | +9 | 表示継続時間の第3要素(秒)。BCD形式の時刻成分。 |
| bDisplayingCycle | BYTE | 1 | +10 | +10 | 表示周期。メッセージの繰り返し周期を示す。 |
| bFormatVersion | BYTE | 1 | +11 | +11 | メッセージ書式のバージョン。形式互換性を示す。 |
| bDisplayPosition | BYTE | 1 | +12 | +12 | 表示位置。画面上の表示箇所を示す。 |
| wMessageLength | WORD | 2 | +14 | +14 | szMessageAreaの文字数(バイト長)。メッセージ本文長を示す。 |
| szMessageArea | WCHAR | 2 | +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 Structureimport 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