Win32 API 日本語リファレンス
ホームSystem.Com.StructuredStorage › PROPBAG2

PROPBAG2

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

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

フィールド

フィールドサイズx64x86説明
dwTypeDWORD4+0+0プロパティの型分類を示す値。PBAG_TYPE系の定数を保持する。
vtVARENUM2+4+4プロパティ値の型を示すVARENUM(VARTYPE)。
cfTypeWORD2+6+6プロパティのクリップボード形式。型が形式で表現される場合に有効。
dwHintDWORD4+8+8プロパティアクセスを高速化するためのヒント値(インデックス)。
pstrNameLPWSTR8/4+16+12プロパティの名前文字列(LPWSTR)。
clsidGUID16+24+16プロパティに関連付けられたオブジェクトのクラスID(CLSID)。

各言語での定義

#include <windows.h>

// PROPBAG2  (x64 40 / x86 32 バイト)
typedef struct PROPBAG2 {
    DWORD dwType;
    VARENUM vt;
    WORD cfType;
    DWORD dwHint;
    LPWSTR pstrName;
    GUID clsid;
} PROPBAG2;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PROPBAG2
{
    public uint dwType;
    public ushort vt;
    public ushort cfType;
    public uint dwHint;
    public IntPtr pstrName;
    public Guid clsid;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PROPBAG2
    Public dwType As UInteger
    Public vt As UShort
    Public cfType As UShort
    Public dwHint As UInteger
    Public pstrName As IntPtr
    Public clsid As Guid
End Structure
import ctypes
from ctypes import wintypes

class PROPBAG2(ctypes.Structure):
    _fields_ = [
        ("dwType", wintypes.DWORD),
        ("vt", ctypes.c_ushort),
        ("cfType", ctypes.c_ushort),
        ("dwHint", wintypes.DWORD),
        ("pstrName", ctypes.c_void_p),
        ("clsid", GUID),
    ]
#[repr(C)]
pub struct PROPBAG2 {
    pub dwType: u32,
    pub vt: u16,
    pub cfType: u16,
    pub dwHint: u32,
    pub pstrName: *mut core::ffi::c_void,
    pub clsid: GUID,
}
import "golang.org/x/sys/windows"

type PROPBAG2 struct {
	dwType uint32
	vt uint16
	cfType uint16
	dwHint uint32
	pstrName uintptr
	clsid windows.GUID
}
type
  PROPBAG2 = record
    dwType: DWORD;
    vt: Word;
    cfType: Word;
    dwHint: DWORD;
    pstrName: Pointer;
    clsid: TGUID;
  end;
const PROPBAG2 = extern struct {
    dwType: u32,
    vt: u16,
    cfType: u16,
    dwHint: u32,
    pstrName: ?*anyopaque,
    clsid: GUID,
};
type
  PROPBAG2 {.bycopy.} = object
    dwType: uint32
    vt: uint16
    cfType: uint16
    dwHint: uint32
    pstrName: pointer
    clsid: GUID
struct PROPBAG2
{
    uint dwType;
    ushort vt;
    ushort cfType;
    uint dwHint;
    void* pstrName;
    GUID clsid;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; PROPBAG2 サイズ: 32 バイト(x86)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; dwType : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; vt : VARENUM (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; cfType : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; dwHint : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pstrName : LPWSTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; clsid : GUID (+16, 16byte)  varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PROPBAG2 サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; dwType : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; vt : VARENUM (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; cfType : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; dwHint : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pstrName : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; clsid : GUID (+24, 16byte)  varptr(st)+24 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global PROPBAG2
    #field int dwType
    #field short vt
    #field short cfType
    #field int dwHint
    #field intptr pstrName
    #field GUID clsid
#endstruct

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