サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
コピー #include <windows.h>
// RPC_ASYNC_NOTIFICATION_INFO (x64 32 / x86 16 バイト)
typedef struct RPC_ASYNC_NOTIFICATION_INFO {
_APC_e__Struct APC;
_IOC_e__Struct IOC;
_IntPtr_e__Struct IntPtr;
HANDLE hEvent;
PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
} RPC_ASYNC_NOTIFICATION_INFO;コピー using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RPC_ASYNC_NOTIFICATION_INFO
{
public _APC_e__Struct APC;
public _IOC_e__Struct IOC;
public _IntPtr_e__Struct IntPtr;
public IntPtr hEvent;
public IntPtr NotificationRoutine;
}コピー Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RPC_ASYNC_NOTIFICATION_INFO
Public APC As _APC_e__Struct
Public IOC As _IOC_e__Struct
Public IntPtr As _IntPtr_e__Struct
Public hEvent As IntPtr
Public NotificationRoutine As IntPtr
End Structureコピー import ctypes
from ctypes import wintypes
class RPC_ASYNC_NOTIFICATION_INFO(ctypes.Structure):
_fields_ = [
("APC", _APC_e__Struct),
("IOC", _IOC_e__Struct),
("IntPtr", _IntPtr_e__Struct),
("hEvent", ctypes.c_void_p),
("NotificationRoutine", ctypes.c_void_p),
]コピー #[repr(C)]
pub struct RPC_ASYNC_NOTIFICATION_INFO {
pub APC: _APC_e__Struct,
pub IOC: _IOC_e__Struct,
pub IntPtr: _IntPtr_e__Struct,
pub hEvent: *mut core::ffi::c_void,
pub NotificationRoutine: *mut core::ffi::c_void,
}コピー import "golang.org/x/sys/windows"
type RPC_ASYNC_NOTIFICATION_INFO struct {
APC _APC_e__Struct
IOC _IOC_e__Struct
IntPtr _IntPtr_e__Struct
hEvent uintptr
NotificationRoutine uintptr
}コピー type
RPC_ASYNC_NOTIFICATION_INFO = record
APC: _APC_e__Struct;
IOC: _IOC_e__Struct;
IntPtr: _IntPtr_e__Struct;
hEvent: Pointer;
NotificationRoutine: Pointer;
end;コピー const RPC_ASYNC_NOTIFICATION_INFO = extern struct {
APC: _APC_e__Struct,
IOC: _IOC_e__Struct,
IntPtr: _IntPtr_e__Struct,
hEvent: ?*anyopaque,
NotificationRoutine: ?*anyopaque,
};コピー type
RPC_ASYNC_NOTIFICATION_INFO {.bycopy.} = object
APC: _APC_e__Struct
IOC: _IOC_e__Struct
IntPtr: _IntPtr_e__Struct
hEvent: pointer
NotificationRoutine: pointerコピー struct RPC_ASYNC_NOTIFICATION_INFO
{
_APC_e__Struct APC;
_IOC_e__Struct IOC;
_IntPtr_e__Struct IntPtr;
void* hEvent;
void* NotificationRoutine;
}HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT (#defstruct/stdim/->)で32/64bit共通。
コピー ; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; RPC_ASYNC_NOTIFICATION_INFO サイズ: 16 バイト(x86)
dim st, 4 ; 4byte整数×4(構造体サイズ 16 / 4 切り上げ)
; APC : _APC_e__Struct (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; IOC : _IOC_e__Struct (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; IntPtr : _IntPtr_e__Struct (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; hEvent : HANDLE (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; NotificationRoutine : PFN_RPCNOTIFICATION_ROUTINE (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。コピー ; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RPC_ASYNC_NOTIFICATION_INFO サイズ: 32 バイト(x64)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; APC : _APC_e__Struct (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; IOC : _IOC_e__Struct (+0, 32byte) varptr(st)+0 を基点に操作(32byte:入れ子/配列)
; IntPtr : _IntPtr_e__Struct (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; hEvent : HANDLE (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; NotificationRoutine : PFN_RPCNOTIFICATION_ROUTINE (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。コピー ; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global RPC_ASYNC_NOTIFICATION_INFO
#field _APC_e__Struct APC
#field _IOC_e__Struct IOC
#field _IntPtr_e__Struct IntPtr
#field intptr hEvent
#field intptr NotificationRoutine
#endstruct
stdim st, RPC_ASYNC_NOTIFICATION_INFO ; NSTRUCT 変数を確保