Win32 API 日本語リファレンス
ホームNetworking.WindowsWebServices › WS_CUSTOM_CHANNEL_CALLBACKS

WS_CUSTOM_CHANNEL_CALLBACKS

構造体
サイズx64: 112 バイト / x86: 56 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
createChannelCallbackWS_CREATE_CHANNEL_CALLBACK8/4+0+0カスタムチャネルを生成する際に呼ばれるコールバック。
freeChannelCallbackWS_FREE_CHANNEL_CALLBACK8/4+8+4チャネルを解放する際に呼ばれるコールバック。
resetChannelCallbackWS_RESET_CHANNEL_CALLBACK8/4+16+8チャネルを初期状態に戻す際に呼ばれるコールバック。
openChannelCallbackWS_OPEN_CHANNEL_CALLBACK8/4+24+12チャネルを開く際に呼ばれるコールバック。
closeChannelCallbackWS_CLOSE_CHANNEL_CALLBACK8/4+32+16チャネルを閉じる際に呼ばれるコールバック。
abortChannelCallbackWS_ABORT_CHANNEL_CALLBACK8/4+40+20チャネルを中断する際に呼ばれるコールバック。
getChannelPropertyCallbackWS_GET_CHANNEL_PROPERTY_CALLBACK8/4+48+24チャネルプロパティを取得する際に呼ばれるコールバック。
setChannelPropertyCallbackWS_SET_CHANNEL_PROPERTY_CALLBACK8/4+56+28チャネルプロパティを設定する際に呼ばれるコールバック。
writeMessageStartCallbackWS_WRITE_MESSAGE_START_CALLBACK8/4+64+32メッセージ書き込み開始時に呼ばれるコールバック。
writeMessageEndCallbackWS_WRITE_MESSAGE_END_CALLBACK8/4+72+36メッセージ書き込み終了時に呼ばれるコールバック。
readMessageStartCallbackWS_READ_MESSAGE_START_CALLBACK8/4+80+40メッセージ読み取り開始時に呼ばれるコールバック。
readMessageEndCallbackWS_READ_MESSAGE_END_CALLBACK8/4+88+44メッセージ読み取り終了時に呼ばれるコールバック。
abandonMessageCallbackWS_ABANDON_MESSAGE_CALLBACK8/4+96+48処理中のメッセージを破棄する際に呼ばれるコールバック。
shutdownSessionChannelCallbackWS_SHUTDOWN_SESSION_CHANNEL_CALLBACK8/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 Structure
import 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: pointer
struct 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 変数を確保