ホーム › Networking.WindowsWebServices › WS_CUSTOM_CHANNEL_CALLBACKS
WS_CUSTOM_CHANNEL_CALLBACKS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| createChannelCallback | WS_CREATE_CHANNEL_CALLBACK | 8/4 | +0 | +0 | カスタムチャネルを生成する際に呼ばれるコールバック。 |
| freeChannelCallback | WS_FREE_CHANNEL_CALLBACK | 8/4 | +8 | +4 | チャネルを解放する際に呼ばれるコールバック。 |
| resetChannelCallback | WS_RESET_CHANNEL_CALLBACK | 8/4 | +16 | +8 | チャネルを初期状態に戻す際に呼ばれるコールバック。 |
| openChannelCallback | WS_OPEN_CHANNEL_CALLBACK | 8/4 | +24 | +12 | チャネルを開く際に呼ばれるコールバック。 |
| closeChannelCallback | WS_CLOSE_CHANNEL_CALLBACK | 8/4 | +32 | +16 | チャネルを閉じる際に呼ばれるコールバック。 |
| abortChannelCallback | WS_ABORT_CHANNEL_CALLBACK | 8/4 | +40 | +20 | チャネルを中断する際に呼ばれるコールバック。 |
| getChannelPropertyCallback | WS_GET_CHANNEL_PROPERTY_CALLBACK | 8/4 | +48 | +24 | チャネルプロパティを取得する際に呼ばれるコールバック。 |
| setChannelPropertyCallback | WS_SET_CHANNEL_PROPERTY_CALLBACK | 8/4 | +56 | +28 | チャネルプロパティを設定する際に呼ばれるコールバック。 |
| writeMessageStartCallback | WS_WRITE_MESSAGE_START_CALLBACK | 8/4 | +64 | +32 | メッセージ書き込み開始時に呼ばれるコールバック。 |
| writeMessageEndCallback | WS_WRITE_MESSAGE_END_CALLBACK | 8/4 | +72 | +36 | メッセージ書き込み終了時に呼ばれるコールバック。 |
| readMessageStartCallback | WS_READ_MESSAGE_START_CALLBACK | 8/4 | +80 | +40 | メッセージ読み取り開始時に呼ばれるコールバック。 |
| readMessageEndCallback | WS_READ_MESSAGE_END_CALLBACK | 8/4 | +88 | +44 | メッセージ読み取り終了時に呼ばれるコールバック。 |
| abandonMessageCallback | WS_ABANDON_MESSAGE_CALLBACK | 8/4 | +96 | +48 | 処理中のメッセージを破棄する際に呼ばれるコールバック。 |
| shutdownSessionChannelCallback | WS_SHUTDOWN_SESSION_CHANNEL_CALLBACK | 8/4 | +104 | +52 | セッションチャネルのシャットダウン時に呼ばれるコールバック。 |
各言語での定義
#include <windows.h>
// WS_CUSTOM_CHANNEL_CALLBACKS (x64 112 / x86 56 バイト)
typedef struct WS_CUSTOM_CHANNEL_CALLBACKS {
WS_CREATE_CHANNEL_CALLBACK createChannelCallback;
WS_FREE_CHANNEL_CALLBACK freeChannelCallback;
WS_RESET_CHANNEL_CALLBACK resetChannelCallback;
WS_OPEN_CHANNEL_CALLBACK openChannelCallback;
WS_CLOSE_CHANNEL_CALLBACK closeChannelCallback;
WS_ABORT_CHANNEL_CALLBACK abortChannelCallback;
WS_GET_CHANNEL_PROPERTY_CALLBACK getChannelPropertyCallback;
WS_SET_CHANNEL_PROPERTY_CALLBACK setChannelPropertyCallback;
WS_WRITE_MESSAGE_START_CALLBACK writeMessageStartCallback;
WS_WRITE_MESSAGE_END_CALLBACK writeMessageEndCallback;
WS_READ_MESSAGE_START_CALLBACK readMessageStartCallback;
WS_READ_MESSAGE_END_CALLBACK readMessageEndCallback;
WS_ABANDON_MESSAGE_CALLBACK abandonMessageCallback;
WS_SHUTDOWN_SESSION_CHANNEL_CALLBACK shutdownSessionChannelCallback;
} WS_CUSTOM_CHANNEL_CALLBACKS;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WS_CUSTOM_CHANNEL_CALLBACKS
{
public IntPtr createChannelCallback;
public IntPtr freeChannelCallback;
public IntPtr resetChannelCallback;
public IntPtr openChannelCallback;
public IntPtr closeChannelCallback;
public IntPtr abortChannelCallback;
public IntPtr getChannelPropertyCallback;
public IntPtr setChannelPropertyCallback;
public IntPtr writeMessageStartCallback;
public IntPtr writeMessageEndCallback;
public IntPtr readMessageStartCallback;
public IntPtr readMessageEndCallback;
public IntPtr abandonMessageCallback;
public IntPtr shutdownSessionChannelCallback;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WS_CUSTOM_CHANNEL_CALLBACKS
Public createChannelCallback As IntPtr
Public freeChannelCallback As IntPtr
Public resetChannelCallback As IntPtr
Public openChannelCallback As IntPtr
Public closeChannelCallback As IntPtr
Public abortChannelCallback As IntPtr
Public getChannelPropertyCallback As IntPtr
Public setChannelPropertyCallback As IntPtr
Public writeMessageStartCallback As IntPtr
Public writeMessageEndCallback As IntPtr
Public readMessageStartCallback As IntPtr
Public readMessageEndCallback As IntPtr
Public abandonMessageCallback As IntPtr
Public shutdownSessionChannelCallback As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class WS_CUSTOM_CHANNEL_CALLBACKS(ctypes.Structure):
_fields_ = [
("createChannelCallback", ctypes.c_void_p),
("freeChannelCallback", ctypes.c_void_p),
("resetChannelCallback", ctypes.c_void_p),
("openChannelCallback", ctypes.c_void_p),
("closeChannelCallback", ctypes.c_void_p),
("abortChannelCallback", ctypes.c_void_p),
("getChannelPropertyCallback", ctypes.c_void_p),
("setChannelPropertyCallback", ctypes.c_void_p),
("writeMessageStartCallback", ctypes.c_void_p),
("writeMessageEndCallback", ctypes.c_void_p),
("readMessageStartCallback", ctypes.c_void_p),
("readMessageEndCallback", ctypes.c_void_p),
("abandonMessageCallback", ctypes.c_void_p),
("shutdownSessionChannelCallback", ctypes.c_void_p),
]#[repr(C)]
pub struct WS_CUSTOM_CHANNEL_CALLBACKS {
pub createChannelCallback: *mut core::ffi::c_void,
pub freeChannelCallback: *mut core::ffi::c_void,
pub resetChannelCallback: *mut core::ffi::c_void,
pub openChannelCallback: *mut core::ffi::c_void,
pub closeChannelCallback: *mut core::ffi::c_void,
pub abortChannelCallback: *mut core::ffi::c_void,
pub getChannelPropertyCallback: *mut core::ffi::c_void,
pub setChannelPropertyCallback: *mut core::ffi::c_void,
pub writeMessageStartCallback: *mut core::ffi::c_void,
pub writeMessageEndCallback: *mut core::ffi::c_void,
pub readMessageStartCallback: *mut core::ffi::c_void,
pub readMessageEndCallback: *mut core::ffi::c_void,
pub abandonMessageCallback: *mut core::ffi::c_void,
pub shutdownSessionChannelCallback: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type WS_CUSTOM_CHANNEL_CALLBACKS struct {
createChannelCallback uintptr
freeChannelCallback uintptr
resetChannelCallback uintptr
openChannelCallback uintptr
closeChannelCallback uintptr
abortChannelCallback uintptr
getChannelPropertyCallback uintptr
setChannelPropertyCallback uintptr
writeMessageStartCallback uintptr
writeMessageEndCallback uintptr
readMessageStartCallback uintptr
readMessageEndCallback uintptr
abandonMessageCallback uintptr
shutdownSessionChannelCallback uintptr
}type
WS_CUSTOM_CHANNEL_CALLBACKS = record
createChannelCallback: Pointer;
freeChannelCallback: Pointer;
resetChannelCallback: Pointer;
openChannelCallback: Pointer;
closeChannelCallback: Pointer;
abortChannelCallback: Pointer;
getChannelPropertyCallback: Pointer;
setChannelPropertyCallback: Pointer;
writeMessageStartCallback: Pointer;
writeMessageEndCallback: Pointer;
readMessageStartCallback: Pointer;
readMessageEndCallback: Pointer;
abandonMessageCallback: Pointer;
shutdownSessionChannelCallback: Pointer;
end;const WS_CUSTOM_CHANNEL_CALLBACKS = extern struct {
createChannelCallback: ?*anyopaque,
freeChannelCallback: ?*anyopaque,
resetChannelCallback: ?*anyopaque,
openChannelCallback: ?*anyopaque,
closeChannelCallback: ?*anyopaque,
abortChannelCallback: ?*anyopaque,
getChannelPropertyCallback: ?*anyopaque,
setChannelPropertyCallback: ?*anyopaque,
writeMessageStartCallback: ?*anyopaque,
writeMessageEndCallback: ?*anyopaque,
readMessageStartCallback: ?*anyopaque,
readMessageEndCallback: ?*anyopaque,
abandonMessageCallback: ?*anyopaque,
shutdownSessionChannelCallback: ?*anyopaque,
};type
WS_CUSTOM_CHANNEL_CALLBACKS {.bycopy.} = object
createChannelCallback: pointer
freeChannelCallback: pointer
resetChannelCallback: pointer
openChannelCallback: pointer
closeChannelCallback: pointer
abortChannelCallback: pointer
getChannelPropertyCallback: pointer
setChannelPropertyCallback: pointer
writeMessageStartCallback: pointer
writeMessageEndCallback: pointer
readMessageStartCallback: pointer
readMessageEndCallback: pointer
abandonMessageCallback: pointer
shutdownSessionChannelCallback: pointerstruct WS_CUSTOM_CHANNEL_CALLBACKS
{
void* createChannelCallback;
void* freeChannelCallback;
void* resetChannelCallback;
void* openChannelCallback;
void* closeChannelCallback;
void* abortChannelCallback;
void* getChannelPropertyCallback;
void* setChannelPropertyCallback;
void* writeMessageStartCallback;
void* writeMessageEndCallback;
void* readMessageStartCallback;
void* readMessageEndCallback;
void* abandonMessageCallback;
void* shutdownSessionChannelCallback;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WS_CUSTOM_CHANNEL_CALLBACKS サイズ: 56 バイト(x86)
dim st, 14 ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; createChannelCallback : WS_CREATE_CHANNEL_CALLBACK (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; freeChannelCallback : WS_FREE_CHANNEL_CALLBACK (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; resetChannelCallback : WS_RESET_CHANNEL_CALLBACK (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; openChannelCallback : WS_OPEN_CHANNEL_CALLBACK (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; closeChannelCallback : WS_CLOSE_CHANNEL_CALLBACK (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; abortChannelCallback : WS_ABORT_CHANNEL_CALLBACK (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; getChannelPropertyCallback : WS_GET_CHANNEL_PROPERTY_CALLBACK (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; setChannelPropertyCallback : WS_SET_CHANNEL_PROPERTY_CALLBACK (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; writeMessageStartCallback : WS_WRITE_MESSAGE_START_CALLBACK (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; writeMessageEndCallback : WS_WRITE_MESSAGE_END_CALLBACK (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; readMessageStartCallback : WS_READ_MESSAGE_START_CALLBACK (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; readMessageEndCallback : WS_READ_MESSAGE_END_CALLBACK (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; abandonMessageCallback : WS_ABANDON_MESSAGE_CALLBACK (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; shutdownSessionChannelCallback : WS_SHUTDOWN_SESSION_CHANNEL_CALLBACK (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WS_CUSTOM_CHANNEL_CALLBACKS サイズ: 112 バイト(x64)
dim st, 28 ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; createChannelCallback : WS_CREATE_CHANNEL_CALLBACK (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; freeChannelCallback : WS_FREE_CHANNEL_CALLBACK (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; resetChannelCallback : WS_RESET_CHANNEL_CALLBACK (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; openChannelCallback : WS_OPEN_CHANNEL_CALLBACK (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; closeChannelCallback : WS_CLOSE_CHANNEL_CALLBACK (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; abortChannelCallback : WS_ABORT_CHANNEL_CALLBACK (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; getChannelPropertyCallback : WS_GET_CHANNEL_PROPERTY_CALLBACK (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; setChannelPropertyCallback : WS_SET_CHANNEL_PROPERTY_CALLBACK (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; writeMessageStartCallback : WS_WRITE_MESSAGE_START_CALLBACK (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; writeMessageEndCallback : WS_WRITE_MESSAGE_END_CALLBACK (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; readMessageStartCallback : WS_READ_MESSAGE_START_CALLBACK (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; readMessageEndCallback : WS_READ_MESSAGE_END_CALLBACK (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; abandonMessageCallback : WS_ABANDON_MESSAGE_CALLBACK (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; shutdownSessionChannelCallback : WS_SHUTDOWN_SESSION_CHANNEL_CALLBACK (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WS_CUSTOM_CHANNEL_CALLBACKS
#field intptr createChannelCallback
#field intptr freeChannelCallback
#field intptr resetChannelCallback
#field intptr openChannelCallback
#field intptr closeChannelCallback
#field intptr abortChannelCallback
#field intptr getChannelPropertyCallback
#field intptr setChannelPropertyCallback
#field intptr writeMessageStartCallback
#field intptr writeMessageEndCallback
#field intptr readMessageStartCallback
#field intptr readMessageEndCallback
#field intptr abandonMessageCallback
#field intptr shutdownSessionChannelCallback
#endstruct
stdim st, WS_CUSTOM_CHANNEL_CALLBACKS ; NSTRUCT 変数を確保