Win32 API 日本語リファレンス
ホームUI.Controls.RichEdit › REOBJECT

REOBJECT

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

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

フィールド

フィールドサイズx64x86説明
cbStructDWORD4+0+0本構造体のサイズをバイト単位で指定する。
cpINT4+4+4オブジェクトが配置される文字位置である。REO_CP_SELECTIONで選択範囲を示す。
clsidGUID16+8+8オブジェクトのクラスを識別するGUIDである。
poleobjIOleObject*8/4+24+24対象IOleObjectインタフェースへのポインタである。
pstgIStorage*8/4+32+28オブジェクトの永続化先IStorageへのポインタである。
polesiteIOleClientSite*8/4+40+32オブジェクトのIOleClientSiteへのポインタである。
sizelSIZE8+48+36オブジェクトのサイズをHIMETRIC単位で示すSIZEである。
dvaspectDWORD4+56+44オブジェクトの表示形態を示すDVASPECT値である。
dwFlagsREOBJECT_FLAGS4+60+48オブジェクトの状態を示すフラグ(REO_系)である。
dwUserDWORD4+64+52アプリが自由に使えるユーザー定義値である。

各言語での定義

#include <windows.h>

// SIZE  (x64 8 / x86 8 バイト)
typedef struct SIZE {
    INT cx;
    INT cy;
} SIZE;

// REOBJECT  (x64 72 / x86 56 バイト)
typedef struct REOBJECT {
    DWORD cbStruct;
    INT cp;
    GUID clsid;
    IOleObject* poleobj;
    IStorage* pstg;
    IOleClientSite* polesite;
    SIZE sizel;
    DWORD dvaspect;
    REOBJECT_FLAGS dwFlags;
    DWORD dwUser;
} REOBJECT;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SIZE
{
    public int cx;
    public int cy;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct REOBJECT
{
    public uint cbStruct;
    public int cp;
    public Guid clsid;
    public IntPtr poleobj;
    public IntPtr pstg;
    public IntPtr polesite;
    public SIZE sizel;
    public uint dvaspect;
    public uint dwFlags;
    public uint dwUser;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SIZE
    Public cx As Integer
    Public cy As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure REOBJECT
    Public cbStruct As UInteger
    Public cp As Integer
    Public clsid As Guid
    Public poleobj As IntPtr
    Public pstg As IntPtr
    Public polesite As IntPtr
    Public sizel As SIZE
    Public dvaspect As UInteger
    Public dwFlags As UInteger
    Public dwUser As UInteger
End Structure
import ctypes
from ctypes import wintypes

class SIZE(ctypes.Structure):
    _fields_ = [
        ("cx", ctypes.c_int),
        ("cy", ctypes.c_int),
    ]

class REOBJECT(ctypes.Structure):
    _fields_ = [
        ("cbStruct", wintypes.DWORD),
        ("cp", ctypes.c_int),
        ("clsid", GUID),
        ("poleobj", ctypes.c_void_p),
        ("pstg", ctypes.c_void_p),
        ("polesite", ctypes.c_void_p),
        ("sizel", SIZE),
        ("dvaspect", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("dwUser", wintypes.DWORD),
    ]
#[repr(C)]
pub struct SIZE {
    pub cx: i32,
    pub cy: i32,
}

#[repr(C)]
pub struct REOBJECT {
    pub cbStruct: u32,
    pub cp: i32,
    pub clsid: GUID,
    pub poleobj: *mut core::ffi::c_void,
    pub pstg: *mut core::ffi::c_void,
    pub polesite: *mut core::ffi::c_void,
    pub sizel: SIZE,
    pub dvaspect: u32,
    pub dwFlags: u32,
    pub dwUser: u32,
}
import "golang.org/x/sys/windows"

type SIZE struct {
	cx int32
	cy int32
}

type REOBJECT struct {
	cbStruct uint32
	cp int32
	clsid windows.GUID
	poleobj uintptr
	pstg uintptr
	polesite uintptr
	sizel SIZE
	dvaspect uint32
	dwFlags uint32
	dwUser uint32
}
type
  SIZE = record
    cx: Integer;
    cy: Integer;
  end;

  REOBJECT = record
    cbStruct: DWORD;
    cp: Integer;
    clsid: TGUID;
    poleobj: Pointer;
    pstg: Pointer;
    polesite: Pointer;
    sizel: SIZE;
    dvaspect: DWORD;
    dwFlags: DWORD;
    dwUser: DWORD;
  end;
const SIZE = extern struct {
    cx: i32,
    cy: i32,
};

const REOBJECT = extern struct {
    cbStruct: u32,
    cp: i32,
    clsid: GUID,
    poleobj: ?*anyopaque,
    pstg: ?*anyopaque,
    polesite: ?*anyopaque,
    sizel: SIZE,
    dvaspect: u32,
    dwFlags: u32,
    dwUser: u32,
};
type
  SIZE {.bycopy.} = object
    cx: int32
    cy: int32

  REOBJECT {.bycopy.} = object
    cbStruct: uint32
    cp: int32
    clsid: GUID
    poleobj: pointer
    pstg: pointer
    polesite: pointer
    sizel: SIZE
    dvaspect: uint32
    dwFlags: uint32
    dwUser: uint32
struct SIZE
{
    int cx;
    int cy;
}

struct REOBJECT
{
    uint cbStruct;
    int cp;
    GUID clsid;
    void* poleobj;
    void* pstg;
    void* polesite;
    SIZE sizel;
    uint dvaspect;
    uint dwFlags;
    uint dwUser;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; REOBJECT サイズ: 56 バイト(x86)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; cp : INT (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; clsid : GUID (+8, 16byte)  varptr(st)+8 を基点に操作(16byte:入れ子/配列)
; poleobj : IOleObject* (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; pstg : IStorage* (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; polesite : IOleClientSite* (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; sizel : SIZE (+36, 8byte)  varptr(st)+36 を基点に操作(8byte:入れ子/配列)
; dvaspect : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; dwFlags : REOBJECT_FLAGS (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; dwUser : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; REOBJECT サイズ: 72 バイト(x64)
dim st, 18    ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; cp : INT (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; clsid : GUID (+8, 16byte)  varptr(st)+8 を基点に操作(16byte:入れ子/配列)
; poleobj : IOleObject* (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pstg : IStorage* (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; polesite : IOleClientSite* (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; sizel : SIZE (+48, 8byte)  varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; dvaspect : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; dwFlags : REOBJECT_FLAGS (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; dwUser : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; ※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 SIZE
    #field int cx
    #field int cy
#endstruct

#defstruct global REOBJECT
    #field int cbStruct
    #field int cp
    #field GUID clsid
    #field intptr poleobj
    #field intptr pstg
    #field intptr polesite
    #field SIZE sizel
    #field int dvaspect
    #field int dwFlags
    #field int dwUser
#endstruct

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