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

WM_PICTURE

構造体
サイズx64: 29 バイト / x86: 17 バイトパッキング1

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

フィールド

フィールドサイズx64x86説明
pwszMIMETypeLPWSTR8/4+0+0画像データのMIMEタイプ文字列(image/jpeg等)。
bPictureTypeBYTE1+8+4画像の種類(ジャケット表/裏等)を示すコード。
pwszDescriptionLPWSTR8/4+9+5画像の説明テキスト。NULL可。
dwDataLenDWORD4+17+9pbDataが指す画像データのバイト数。
pbDataBYTE*8/4+21+13画像バイナリデータへのポインタ。

各言語での定義

#include <windows.h>

// WM_PICTURE  (x64 29 / x86 17 バイト)
#pragma pack(push, 1)
typedef struct WM_PICTURE {
    LPWSTR pwszMIMEType;
    BYTE bPictureType;
    LPWSTR pwszDescription;
    DWORD dwDataLen;
    BYTE* pbData;
} WM_PICTURE;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct WM_PICTURE
{
    public IntPtr pwszMIMEType;
    public byte bPictureType;
    public IntPtr pwszDescription;
    public uint dwDataLen;
    public IntPtr pbData;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure WM_PICTURE
    Public pwszMIMEType As IntPtr
    Public bPictureType As Byte
    Public pwszDescription As IntPtr
    Public dwDataLen As UInteger
    Public pbData As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class WM_PICTURE(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("pwszMIMEType", ctypes.c_void_p),
        ("bPictureType", ctypes.c_ubyte),
        ("pwszDescription", ctypes.c_void_p),
        ("dwDataLen", wintypes.DWORD),
        ("pbData", ctypes.c_void_p),
    ]
#[repr(C, packed(1))]
pub struct WM_PICTURE {
    pub pwszMIMEType: *mut core::ffi::c_void,
    pub bPictureType: u8,
    pub pwszDescription: *mut core::ffi::c_void,
    pub dwDataLen: u32,
    pub pbData: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type WM_PICTURE struct {
	pwszMIMEType uintptr
	bPictureType byte
	pwszDescription uintptr
	dwDataLen uint32
	pbData uintptr
}
type
  WM_PICTURE = packed record
    pwszMIMEType: Pointer;
    bPictureType: Byte;
    pwszDescription: Pointer;
    dwDataLen: DWORD;
    pbData: Pointer;
  end;
const WM_PICTURE = extern struct {
    pwszMIMEType: ?*anyopaque,
    bPictureType: u8,
    pwszDescription: ?*anyopaque,
    dwDataLen: u32,
    pbData: ?*anyopaque,
};
type
  WM_PICTURE {.packed.} = object
    pwszMIMEType: pointer
    bPictureType: uint8
    pwszDescription: pointer
    dwDataLen: uint32
    pbData: pointer
align(1)
struct WM_PICTURE
{
    void* pwszMIMEType;
    ubyte bPictureType;
    void* pwszDescription;
    uint dwDataLen;
    void* pbData;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WM_PICTURE サイズ: 17 バイト(x86)
dim st, 5    ; 4byte整数×5(構造体サイズ 17 / 4 切り上げ)
; pwszMIMEType : LPWSTR (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; bPictureType : BYTE (+4, 1byte)  poke st,4,値  /  値 = peek(st,4)
; pwszDescription : LPWSTR (+5, 4byte)  lpoke st,5,値  /  値 = lpeek(st,5)
; dwDataLen : DWORD (+9, 4byte)  lpoke st,9,値  /  値 = lpeek(st,9)
; pbData : BYTE* (+13, 4byte)  lpoke st,13,値  /  値 = lpeek(st,13)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WM_PICTURE サイズ: 29 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 29 / 4 切り上げ)
; pwszMIMEType : LPWSTR (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; bPictureType : BYTE (+8, 1byte)  poke st,8,値  /  値 = peek(st,8)
; pwszDescription : LPWSTR (+9, 8byte)  qpoke st,9,値 / qpeek(st,9)  ※IronHSPのみ。3.7/3.8は lpoke st,9,下位 : lpoke st,13,上位
; dwDataLen : DWORD (+17, 4byte)  lpoke st,17,値  /  値 = lpeek(st,17)
; pbData : BYTE* (+21, 8byte)  qpoke st,21,値 / qpeek(st,21)  ※IronHSPのみ。3.7/3.8は lpoke st,21,下位 : lpoke st,25,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WM_PICTURE, pack=1
    #field intptr pwszMIMEType
    #field byte bPictureType
    #field intptr pwszDescription
    #field int dwDataLen
    #field intptr pbData
#endstruct

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