ホーム › System.Com.Events › COMEVENTSYSCHANGEINFO
COMEVENTSYSCHANGEINFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| cbSize | DWORD | 4 | +0 | +0 | この構造体のバイトサイズ。 |
| changeType | EOC_ChangeType | 4 | +4 | +4 | 発生した変更の種別を示す列挙値(追加/削除/変更)。 |
| objectId | LPWSTR | 8/4 | +8 | +8 | 変更されたオブジェクトを識別する文字列。 |
| partitionId | LPWSTR | 8/4 | +16 | +12 | オブジェクトが属するパーティションのID文字列。 |
| applicationId | LPWSTR | 8/4 | +24 | +16 | 関連アプリケーションのID文字列。 |
| reserved | GUID | 160 | +32 | +20 | 予約済みのGUIDフィールド。 |
各言語での定義
#include <windows.h>
// COMEVENTSYSCHANGEINFO (x64 192 / x86 180 バイト)
typedef struct COMEVENTSYSCHANGEINFO {
DWORD cbSize;
EOC_ChangeType changeType;
LPWSTR objectId;
LPWSTR partitionId;
LPWSTR applicationId;
GUID reserved[10];
} COMEVENTSYSCHANGEINFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct COMEVENTSYSCHANGEINFO
{
public uint cbSize;
public int changeType;
public IntPtr objectId;
public IntPtr partitionId;
public IntPtr applicationId;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public Guid[] reserved;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure COMEVENTSYSCHANGEINFO
Public cbSize As UInteger
Public changeType As Integer
Public objectId As IntPtr
Public partitionId As IntPtr
Public applicationId As IntPtr
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)> Public reserved() As Guid
End Structureimport ctypes
from ctypes import wintypes
class COMEVENTSYSCHANGEINFO(ctypes.Structure):
_fields_ = [
("cbSize", wintypes.DWORD),
("changeType", ctypes.c_int),
("objectId", ctypes.c_void_p),
("partitionId", ctypes.c_void_p),
("applicationId", ctypes.c_void_p),
("reserved", GUID * 10),
]#[repr(C)]
pub struct COMEVENTSYSCHANGEINFO {
pub cbSize: u32,
pub changeType: i32,
pub objectId: *mut core::ffi::c_void,
pub partitionId: *mut core::ffi::c_void,
pub applicationId: *mut core::ffi::c_void,
pub reserved: [GUID; 10],
}import "golang.org/x/sys/windows"
type COMEVENTSYSCHANGEINFO struct {
cbSize uint32
changeType int32
objectId uintptr
partitionId uintptr
applicationId uintptr
reserved [10]windows.GUID
}type
COMEVENTSYSCHANGEINFO = record
cbSize: DWORD;
changeType: Integer;
objectId: Pointer;
partitionId: Pointer;
applicationId: Pointer;
reserved: array[0..9] of TGUID;
end;const COMEVENTSYSCHANGEINFO = extern struct {
cbSize: u32,
changeType: i32,
objectId: ?*anyopaque,
partitionId: ?*anyopaque,
applicationId: ?*anyopaque,
reserved: [10]GUID,
};type
COMEVENTSYSCHANGEINFO {.bycopy.} = object
cbSize: uint32
changeType: int32
objectId: pointer
partitionId: pointer
applicationId: pointer
reserved: array[10, GUID]struct COMEVENTSYSCHANGEINFO
{
uint cbSize;
int changeType;
void* objectId;
void* partitionId;
void* applicationId;
GUID[10] reserved;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; COMEVENTSYSCHANGEINFO サイズ: 180 バイト(x86)
dim st, 45 ; 4byte整数×45(構造体サイズ 180 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; changeType : EOC_ChangeType (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; objectId : LPWSTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; partitionId : LPWSTR (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; applicationId : LPWSTR (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; reserved : GUID (+20, 160byte) varptr(st)+20 を基点に操作(160byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; COMEVENTSYSCHANGEINFO サイズ: 192 バイト(x64)
dim st, 48 ; 4byte整数×48(構造体サイズ 192 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; changeType : EOC_ChangeType (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; objectId : LPWSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; partitionId : LPWSTR (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; applicationId : LPWSTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; reserved : GUID (+32, 160byte) varptr(st)+32 を基点に操作(160byte:入れ子/配列)
; ※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 COMEVENTSYSCHANGEINFO
#field int cbSize
#field int changeType
#field intptr objectId
#field intptr partitionId
#field intptr applicationId
#field GUID reserved 10
#endstruct
stdim st, COMEVENTSYSCHANGEINFO ; NSTRUCT 変数を確保
st->cbSize = 100
mes "cbSize=" + st->cbSize