ホーム › UI.Controls.RichEdit › REOBJECT
REOBJECT
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| cbStruct | DWORD | 4 | +0 | +0 | 本構造体のサイズをバイト単位で指定する。 |
| cp | INT | 4 | +4 | +4 | オブジェクトが配置される文字位置である。REO_CP_SELECTIONで選択範囲を示す。 |
| clsid | GUID | 16 | +8 | +8 | オブジェクトのクラスを識別するGUIDである。 |
| poleobj | IOleObject* | 8/4 | +24 | +24 | 対象IOleObjectインタフェースへのポインタである。 |
| pstg | IStorage* | 8/4 | +32 | +28 | オブジェクトの永続化先IStorageへのポインタである。 |
| polesite | IOleClientSite* | 8/4 | +40 | +32 | オブジェクトのIOleClientSiteへのポインタである。 |
| sizel | SIZE | 8 | +48 | +36 | オブジェクトのサイズをHIMETRIC単位で示すSIZEである。 |
| dvaspect | DWORD | 4 | +56 | +44 | オブジェクトの表示形態を示すDVASPECT値である。 |
| dwFlags | REOBJECT_FLAGS | 4 | +60 | +48 | オブジェクトの状態を示すフラグ(REO_系)である。 |
| dwUser | DWORD | 4 | +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 Structureimport 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: uint32struct 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