ホーム › System.DistributedTransactionCoordinator › xa_switch_t
xa_switch_t
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| name | CHAR | 32 | +0 | +0 | XAリソースマネージャの名称(ANSI文字列)。 |
| flags | INT | 4 | +32 | +32 | リソースマネージャの機能フラグ。 |
| version | INT | 4 | +36 | +36 | XAスイッチ構造体のバージョン。 |
| xa_open_entry | INT_PTR | 8/4 | +40 | +40 | xa_open関数へのエントリポインタ。 |
| xa_close_entry | INT_PTR | 8/4 | +48 | +44 | xa_close関数へのエントリポインタ。 |
| xa_start_entry | INT_PTR | 8/4 | +56 | +48 | xa_start関数へのエントリポインタ。 |
| xa_end_entry | INT_PTR | 8/4 | +64 | +52 | xa_end関数へのエントリポインタ。 |
| xa_rollback_entry | INT_PTR | 8/4 | +72 | +56 | xa_rollback関数へのエントリポインタ。 |
| xa_prepare_entry | INT_PTR | 8/4 | +80 | +60 | xa_prepare関数へのエントリポインタ。 |
| xa_commit_entry | INT_PTR | 8/4 | +88 | +64 | xa_commit関数へのエントリポインタ。 |
| xa_recover_entry | INT_PTR | 8/4 | +96 | +68 | xa_recover関数へのエントリポインタ。 |
| xa_forget_entry | INT_PTR | 8/4 | +104 | +72 | xa_forget関数へのエントリポインタ。 |
| xa_complete_entry | INT_PTR | 8/4 | +112 | +76 | xa_complete関数へのエントリポインタ。 |
各言語での定義
#include <windows.h>
// xa_switch_t (x64 120 / x86 80 バイト)
typedef struct xa_switch_t {
CHAR name[32];
INT flags;
INT version;
INT_PTR xa_open_entry;
INT_PTR xa_close_entry;
INT_PTR xa_start_entry;
INT_PTR xa_end_entry;
INT_PTR xa_rollback_entry;
INT_PTR xa_prepare_entry;
INT_PTR xa_commit_entry;
INT_PTR xa_recover_entry;
INT_PTR xa_forget_entry;
INT_PTR xa_complete_entry;
} xa_switch_t;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct xa_switch_t
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public sbyte[] name;
public int flags;
public int version;
public IntPtr xa_open_entry;
public IntPtr xa_close_entry;
public IntPtr xa_start_entry;
public IntPtr xa_end_entry;
public IntPtr xa_rollback_entry;
public IntPtr xa_prepare_entry;
public IntPtr xa_commit_entry;
public IntPtr xa_recover_entry;
public IntPtr xa_forget_entry;
public IntPtr xa_complete_entry;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure xa_switch_t
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public name() As SByte
Public flags As Integer
Public version As Integer
Public xa_open_entry As IntPtr
Public xa_close_entry As IntPtr
Public xa_start_entry As IntPtr
Public xa_end_entry As IntPtr
Public xa_rollback_entry As IntPtr
Public xa_prepare_entry As IntPtr
Public xa_commit_entry As IntPtr
Public xa_recover_entry As IntPtr
Public xa_forget_entry As IntPtr
Public xa_complete_entry As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class xa_switch_t(ctypes.Structure):
_fields_ = [
("name", ctypes.c_byte * 32),
("flags", ctypes.c_int),
("version", ctypes.c_int),
("xa_open_entry", ctypes.c_ssize_t),
("xa_close_entry", ctypes.c_ssize_t),
("xa_start_entry", ctypes.c_ssize_t),
("xa_end_entry", ctypes.c_ssize_t),
("xa_rollback_entry", ctypes.c_ssize_t),
("xa_prepare_entry", ctypes.c_ssize_t),
("xa_commit_entry", ctypes.c_ssize_t),
("xa_recover_entry", ctypes.c_ssize_t),
("xa_forget_entry", ctypes.c_ssize_t),
("xa_complete_entry", ctypes.c_ssize_t),
]#[repr(C)]
pub struct xa_switch_t {
pub name: [i8; 32],
pub flags: i32,
pub version: i32,
pub xa_open_entry: isize,
pub xa_close_entry: isize,
pub xa_start_entry: isize,
pub xa_end_entry: isize,
pub xa_rollback_entry: isize,
pub xa_prepare_entry: isize,
pub xa_commit_entry: isize,
pub xa_recover_entry: isize,
pub xa_forget_entry: isize,
pub xa_complete_entry: isize,
}import "golang.org/x/sys/windows"
type xa_switch_t struct {
name [32]int8
flags int32
version int32
xa_open_entry uintptr
xa_close_entry uintptr
xa_start_entry uintptr
xa_end_entry uintptr
xa_rollback_entry uintptr
xa_prepare_entry uintptr
xa_commit_entry uintptr
xa_recover_entry uintptr
xa_forget_entry uintptr
xa_complete_entry uintptr
}type
xa_switch_t = record
name: array[0..31] of Shortint;
flags: Integer;
version: Integer;
xa_open_entry: NativeInt;
xa_close_entry: NativeInt;
xa_start_entry: NativeInt;
xa_end_entry: NativeInt;
xa_rollback_entry: NativeInt;
xa_prepare_entry: NativeInt;
xa_commit_entry: NativeInt;
xa_recover_entry: NativeInt;
xa_forget_entry: NativeInt;
xa_complete_entry: NativeInt;
end;const xa_switch_t = extern struct {
name: [32]i8,
flags: i32,
version: i32,
xa_open_entry: isize,
xa_close_entry: isize,
xa_start_entry: isize,
xa_end_entry: isize,
xa_rollback_entry: isize,
xa_prepare_entry: isize,
xa_commit_entry: isize,
xa_recover_entry: isize,
xa_forget_entry: isize,
xa_complete_entry: isize,
};type
xa_switch_t {.bycopy.} = object
name: array[32, int8]
flags: int32
version: int32
xa_open_entry: int
xa_close_entry: int
xa_start_entry: int
xa_end_entry: int
xa_rollback_entry: int
xa_prepare_entry: int
xa_commit_entry: int
xa_recover_entry: int
xa_forget_entry: int
xa_complete_entry: intstruct xa_switch_t
{
byte[32] name;
int flags;
int version;
ptrdiff_t xa_open_entry;
ptrdiff_t xa_close_entry;
ptrdiff_t xa_start_entry;
ptrdiff_t xa_end_entry;
ptrdiff_t xa_rollback_entry;
ptrdiff_t xa_prepare_entry;
ptrdiff_t xa_commit_entry;
ptrdiff_t xa_recover_entry;
ptrdiff_t xa_forget_entry;
ptrdiff_t xa_complete_entry;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; xa_switch_t サイズ: 80 バイト(x86)
dim st, 20 ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; name : CHAR (+0, 32byte) varptr(st)+0 を基点に操作(32byte:入れ子/配列)
; flags : INT (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; version : INT (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; xa_open_entry : INT_PTR (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; xa_close_entry : INT_PTR (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; xa_start_entry : INT_PTR (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; xa_end_entry : INT_PTR (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; xa_rollback_entry : INT_PTR (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; xa_prepare_entry : INT_PTR (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; xa_commit_entry : INT_PTR (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; xa_recover_entry : INT_PTR (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; xa_forget_entry : INT_PTR (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; xa_complete_entry : INT_PTR (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; xa_switch_t サイズ: 120 バイト(x64)
dim st, 30 ; 4byte整数×30(構造体サイズ 120 / 4 切り上げ)
; name : CHAR (+0, 32byte) varptr(st)+0 を基点に操作(32byte:入れ子/配列)
; flags : INT (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; version : INT (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; xa_open_entry : INT_PTR (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; xa_close_entry : INT_PTR (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; xa_start_entry : INT_PTR (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; xa_end_entry : INT_PTR (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; xa_rollback_entry : INT_PTR (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; xa_prepare_entry : INT_PTR (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; xa_commit_entry : INT_PTR (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; xa_recover_entry : INT_PTR (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; xa_forget_entry : INT_PTR (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; xa_complete_entry : INT_PTR (+112, 8byte) qpoke st,112,値 / qpeek(st,112) ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global xa_switch_t
#field byte name 32
#field int flags
#field int version
#field intptr xa_open_entry
#field intptr xa_close_entry
#field intptr xa_start_entry
#field intptr xa_end_entry
#field intptr xa_rollback_entry
#field intptr xa_prepare_entry
#field intptr xa_commit_entry
#field intptr xa_recover_entry
#field intptr xa_forget_entry
#field intptr xa_complete_entry
#endstruct
stdim st, xa_switch_t ; NSTRUCT 変数を確保
st->flags = 100
mes "flags=" + st->flags