ホーム › Networking.WinSock › WSPPROC_TABLE
WSPPROC_TABLE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| lpWSPAccept | LPWSPACCEPT | 8/4 | +0 | +0 | WSPAccept関数へのポインタ。接続を受理する。 |
| lpWSPAddressToString | LPWSPADDRESSTOSTRING | 8/4 | +8 | +4 | WSPAddressToString関数へのポインタ。アドレスを文字列化する。 |
| lpWSPAsyncSelect | LPWSPASYNCSELECT | 8/4 | +16 | +8 | WSPAsyncSelect関数へのポインタ。非同期イベント通知を設定する。 |
| lpWSPBind | LPWSPBIND | 8/4 | +24 | +12 | WSPBind関数へのポインタ。ソケットにアドレスを割り当てる。 |
| lpWSPCancelBlockingCall | LPWSPCANCELBLOCKINGCALL | 8/4 | +32 | +16 | WSPCancelBlockingCall関数へのポインタ。ブロッキング呼び出しを取り消す。 |
| lpWSPCleanup | LPWSPCLEANUP | 8/4 | +40 | +20 | WSPCleanup関数へのポインタ。プロバイダ利用を終了する。 |
| lpWSPCloseSocket | LPWSPCLOSESOCKET | 8/4 | +48 | +24 | WSPCloseSocket関数へのポインタ。ソケットを閉じる。 |
| lpWSPConnect | LPWSPCONNECT | 8/4 | +56 | +28 | WSPConnect関数へのポインタ。接続を確立する。 |
| lpWSPDuplicateSocket | LPWSPDUPLICATESOCKET | 8/4 | +64 | +32 | WSPDuplicateSocket関数へのポインタ。ソケットを複製する。 |
| lpWSPEnumNetworkEvents | LPWSPENUMNETWORKEVENTS | 8/4 | +72 | +36 | WSPEnumNetworkEvents関数へのポインタ。発生イベントを列挙する。 |
| lpWSPEventSelect | LPWSPEVENTSELECT | 8/4 | +80 | +40 | WSPEventSelect関数へのポインタ。イベントオブジェクトを関連付ける。 |
| lpWSPGetOverlappedResult | LPWSPGETOVERLAPPEDRESULT | 8/4 | +88 | +44 | WSPGetOverlappedResult関数へのポインタ。重複I/O結果を取得する。 |
| lpWSPGetPeerName | LPWSPGETPEERNAME | 8/4 | +96 | +48 | WSPGetPeerName関数へのポインタ。接続先アドレスを取得する。 |
| lpWSPGetSockName | LPWSPGETSOCKNAME | 8/4 | +104 | +52 | WSPGetSockName関数へのポインタ。ローカルアドレスを取得する。 |
| lpWSPGetSockOpt | LPWSPGETSOCKOPT | 8/4 | +112 | +56 | WSPGetSockOpt関数へのポインタ。ソケットオプションを取得する。 |
| lpWSPGetQOSByName | LPWSPGETQOSBYNAME | 8/4 | +120 | +60 | WSPGetQOSByName関数へのポインタ。名前からQoSテンプレートを取得する。 |
| lpWSPIoctl | LPWSPIOCTL | 8/4 | +128 | +64 | WSPIoctl関数へのポインタ。ソケット制御操作を行う。 |
| lpWSPJoinLeaf | LPWSPJOINLEAF | 8/4 | +136 | +68 | WSPJoinLeaf関数へのポインタ。マルチポイントセッションに参加する。 |
| lpWSPListen | LPWSPLISTEN | 8/4 | +144 | +72 | WSPListen関数へのポインタ。接続待ち受けを開始する。 |
| lpWSPRecv | LPWSPRECV | 8/4 | +152 | +76 | WSPRecv関数へのポインタ。データを受信する。 |
| lpWSPRecvDisconnect | LPWSPRECVDISCONNECT | 8/4 | +160 | +80 | WSPRecvDisconnect関数へのポインタ。切断データを受信する。 |
| lpWSPRecvFrom | LPWSPRECVFROM | 8/4 | +168 | +84 | WSPRecvFrom関数へのポインタ。送信元情報付きで受信する。 |
| lpWSPSelect | LPWSPSELECT | 8/4 | +176 | +88 | WSPSelect関数へのポインタ。ソケットの状態を監視する。 |
| lpWSPSend | LPWSPSEND | 8/4 | +184 | +92 | WSPSend関数へのポインタ。データを送信する。 |
| lpWSPSendDisconnect | LPWSPSENDDISCONNECT | 8/4 | +192 | +96 | WSPSendDisconnect関数へのポインタ。切断データを送信する。 |
| lpWSPSendTo | LPWSPSENDTO | 8/4 | +200 | +100 | WSPSendTo関数へのポインタ。宛先指定で送信する。 |
| lpWSPSetSockOpt | LPWSPSETSOCKOPT | 8/4 | +208 | +104 | WSPSetSockOpt関数へのポインタ。ソケットオプションを設定する。 |
| lpWSPShutdown | LPWSPSHUTDOWN | 8/4 | +216 | +108 | WSPShutdown関数へのポインタ。送受信を停止する。 |
| lpWSPSocket | LPWSPSOCKET | 8/4 | +224 | +112 | WSPSocket関数へのポインタ。ソケットを作成する。 |
| lpWSPStringToAddress | LPWSPSTRINGTOADDRESS | 8/4 | +232 | +116 | WSPStringToAddress関数へのポインタ。文字列をアドレスに変換する。 |
各言語での定義
#include <windows.h>
// WSPPROC_TABLE (x64 240 / x86 120 バイト)
typedef struct WSPPROC_TABLE {
LPWSPACCEPT lpWSPAccept;
LPWSPADDRESSTOSTRING lpWSPAddressToString;
LPWSPASYNCSELECT lpWSPAsyncSelect;
LPWSPBIND lpWSPBind;
LPWSPCANCELBLOCKINGCALL lpWSPCancelBlockingCall;
LPWSPCLEANUP lpWSPCleanup;
LPWSPCLOSESOCKET lpWSPCloseSocket;
LPWSPCONNECT lpWSPConnect;
LPWSPDUPLICATESOCKET lpWSPDuplicateSocket;
LPWSPENUMNETWORKEVENTS lpWSPEnumNetworkEvents;
LPWSPEVENTSELECT lpWSPEventSelect;
LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult;
LPWSPGETPEERNAME lpWSPGetPeerName;
LPWSPGETSOCKNAME lpWSPGetSockName;
LPWSPGETSOCKOPT lpWSPGetSockOpt;
LPWSPGETQOSBYNAME lpWSPGetQOSByName;
LPWSPIOCTL lpWSPIoctl;
LPWSPJOINLEAF lpWSPJoinLeaf;
LPWSPLISTEN lpWSPListen;
LPWSPRECV lpWSPRecv;
LPWSPRECVDISCONNECT lpWSPRecvDisconnect;
LPWSPRECVFROM lpWSPRecvFrom;
LPWSPSELECT lpWSPSelect;
LPWSPSEND lpWSPSend;
LPWSPSENDDISCONNECT lpWSPSendDisconnect;
LPWSPSENDTO lpWSPSendTo;
LPWSPSETSOCKOPT lpWSPSetSockOpt;
LPWSPSHUTDOWN lpWSPShutdown;
LPWSPSOCKET lpWSPSocket;
LPWSPSTRINGTOADDRESS lpWSPStringToAddress;
} WSPPROC_TABLE;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WSPPROC_TABLE
{
public IntPtr lpWSPAccept;
public IntPtr lpWSPAddressToString;
public IntPtr lpWSPAsyncSelect;
public IntPtr lpWSPBind;
public IntPtr lpWSPCancelBlockingCall;
public IntPtr lpWSPCleanup;
public IntPtr lpWSPCloseSocket;
public IntPtr lpWSPConnect;
public IntPtr lpWSPDuplicateSocket;
public IntPtr lpWSPEnumNetworkEvents;
public IntPtr lpWSPEventSelect;
public IntPtr lpWSPGetOverlappedResult;
public IntPtr lpWSPGetPeerName;
public IntPtr lpWSPGetSockName;
public IntPtr lpWSPGetSockOpt;
public IntPtr lpWSPGetQOSByName;
public IntPtr lpWSPIoctl;
public IntPtr lpWSPJoinLeaf;
public IntPtr lpWSPListen;
public IntPtr lpWSPRecv;
public IntPtr lpWSPRecvDisconnect;
public IntPtr lpWSPRecvFrom;
public IntPtr lpWSPSelect;
public IntPtr lpWSPSend;
public IntPtr lpWSPSendDisconnect;
public IntPtr lpWSPSendTo;
public IntPtr lpWSPSetSockOpt;
public IntPtr lpWSPShutdown;
public IntPtr lpWSPSocket;
public IntPtr lpWSPStringToAddress;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WSPPROC_TABLE
Public lpWSPAccept As IntPtr
Public lpWSPAddressToString As IntPtr
Public lpWSPAsyncSelect As IntPtr
Public lpWSPBind As IntPtr
Public lpWSPCancelBlockingCall As IntPtr
Public lpWSPCleanup As IntPtr
Public lpWSPCloseSocket As IntPtr
Public lpWSPConnect As IntPtr
Public lpWSPDuplicateSocket As IntPtr
Public lpWSPEnumNetworkEvents As IntPtr
Public lpWSPEventSelect As IntPtr
Public lpWSPGetOverlappedResult As IntPtr
Public lpWSPGetPeerName As IntPtr
Public lpWSPGetSockName As IntPtr
Public lpWSPGetSockOpt As IntPtr
Public lpWSPGetQOSByName As IntPtr
Public lpWSPIoctl As IntPtr
Public lpWSPJoinLeaf As IntPtr
Public lpWSPListen As IntPtr
Public lpWSPRecv As IntPtr
Public lpWSPRecvDisconnect As IntPtr
Public lpWSPRecvFrom As IntPtr
Public lpWSPSelect As IntPtr
Public lpWSPSend As IntPtr
Public lpWSPSendDisconnect As IntPtr
Public lpWSPSendTo As IntPtr
Public lpWSPSetSockOpt As IntPtr
Public lpWSPShutdown As IntPtr
Public lpWSPSocket As IntPtr
Public lpWSPStringToAddress As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class WSPPROC_TABLE(ctypes.Structure):
_fields_ = [
("lpWSPAccept", ctypes.c_void_p),
("lpWSPAddressToString", ctypes.c_void_p),
("lpWSPAsyncSelect", ctypes.c_void_p),
("lpWSPBind", ctypes.c_void_p),
("lpWSPCancelBlockingCall", ctypes.c_void_p),
("lpWSPCleanup", ctypes.c_void_p),
("lpWSPCloseSocket", ctypes.c_void_p),
("lpWSPConnect", ctypes.c_void_p),
("lpWSPDuplicateSocket", ctypes.c_void_p),
("lpWSPEnumNetworkEvents", ctypes.c_void_p),
("lpWSPEventSelect", ctypes.c_void_p),
("lpWSPGetOverlappedResult", ctypes.c_void_p),
("lpWSPGetPeerName", ctypes.c_void_p),
("lpWSPGetSockName", ctypes.c_void_p),
("lpWSPGetSockOpt", ctypes.c_void_p),
("lpWSPGetQOSByName", ctypes.c_void_p),
("lpWSPIoctl", ctypes.c_void_p),
("lpWSPJoinLeaf", ctypes.c_void_p),
("lpWSPListen", ctypes.c_void_p),
("lpWSPRecv", ctypes.c_void_p),
("lpWSPRecvDisconnect", ctypes.c_void_p),
("lpWSPRecvFrom", ctypes.c_void_p),
("lpWSPSelect", ctypes.c_void_p),
("lpWSPSend", ctypes.c_void_p),
("lpWSPSendDisconnect", ctypes.c_void_p),
("lpWSPSendTo", ctypes.c_void_p),
("lpWSPSetSockOpt", ctypes.c_void_p),
("lpWSPShutdown", ctypes.c_void_p),
("lpWSPSocket", ctypes.c_void_p),
("lpWSPStringToAddress", ctypes.c_void_p),
]#[repr(C)]
pub struct WSPPROC_TABLE {
pub lpWSPAccept: *mut core::ffi::c_void,
pub lpWSPAddressToString: *mut core::ffi::c_void,
pub lpWSPAsyncSelect: *mut core::ffi::c_void,
pub lpWSPBind: *mut core::ffi::c_void,
pub lpWSPCancelBlockingCall: *mut core::ffi::c_void,
pub lpWSPCleanup: *mut core::ffi::c_void,
pub lpWSPCloseSocket: *mut core::ffi::c_void,
pub lpWSPConnect: *mut core::ffi::c_void,
pub lpWSPDuplicateSocket: *mut core::ffi::c_void,
pub lpWSPEnumNetworkEvents: *mut core::ffi::c_void,
pub lpWSPEventSelect: *mut core::ffi::c_void,
pub lpWSPGetOverlappedResult: *mut core::ffi::c_void,
pub lpWSPGetPeerName: *mut core::ffi::c_void,
pub lpWSPGetSockName: *mut core::ffi::c_void,
pub lpWSPGetSockOpt: *mut core::ffi::c_void,
pub lpWSPGetQOSByName: *mut core::ffi::c_void,
pub lpWSPIoctl: *mut core::ffi::c_void,
pub lpWSPJoinLeaf: *mut core::ffi::c_void,
pub lpWSPListen: *mut core::ffi::c_void,
pub lpWSPRecv: *mut core::ffi::c_void,
pub lpWSPRecvDisconnect: *mut core::ffi::c_void,
pub lpWSPRecvFrom: *mut core::ffi::c_void,
pub lpWSPSelect: *mut core::ffi::c_void,
pub lpWSPSend: *mut core::ffi::c_void,
pub lpWSPSendDisconnect: *mut core::ffi::c_void,
pub lpWSPSendTo: *mut core::ffi::c_void,
pub lpWSPSetSockOpt: *mut core::ffi::c_void,
pub lpWSPShutdown: *mut core::ffi::c_void,
pub lpWSPSocket: *mut core::ffi::c_void,
pub lpWSPStringToAddress: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type WSPPROC_TABLE struct {
lpWSPAccept uintptr
lpWSPAddressToString uintptr
lpWSPAsyncSelect uintptr
lpWSPBind uintptr
lpWSPCancelBlockingCall uintptr
lpWSPCleanup uintptr
lpWSPCloseSocket uintptr
lpWSPConnect uintptr
lpWSPDuplicateSocket uintptr
lpWSPEnumNetworkEvents uintptr
lpWSPEventSelect uintptr
lpWSPGetOverlappedResult uintptr
lpWSPGetPeerName uintptr
lpWSPGetSockName uintptr
lpWSPGetSockOpt uintptr
lpWSPGetQOSByName uintptr
lpWSPIoctl uintptr
lpWSPJoinLeaf uintptr
lpWSPListen uintptr
lpWSPRecv uintptr
lpWSPRecvDisconnect uintptr
lpWSPRecvFrom uintptr
lpWSPSelect uintptr
lpWSPSend uintptr
lpWSPSendDisconnect uintptr
lpWSPSendTo uintptr
lpWSPSetSockOpt uintptr
lpWSPShutdown uintptr
lpWSPSocket uintptr
lpWSPStringToAddress uintptr
}type
WSPPROC_TABLE = record
lpWSPAccept: Pointer;
lpWSPAddressToString: Pointer;
lpWSPAsyncSelect: Pointer;
lpWSPBind: Pointer;
lpWSPCancelBlockingCall: Pointer;
lpWSPCleanup: Pointer;
lpWSPCloseSocket: Pointer;
lpWSPConnect: Pointer;
lpWSPDuplicateSocket: Pointer;
lpWSPEnumNetworkEvents: Pointer;
lpWSPEventSelect: Pointer;
lpWSPGetOverlappedResult: Pointer;
lpWSPGetPeerName: Pointer;
lpWSPGetSockName: Pointer;
lpWSPGetSockOpt: Pointer;
lpWSPGetQOSByName: Pointer;
lpWSPIoctl: Pointer;
lpWSPJoinLeaf: Pointer;
lpWSPListen: Pointer;
lpWSPRecv: Pointer;
lpWSPRecvDisconnect: Pointer;
lpWSPRecvFrom: Pointer;
lpWSPSelect: Pointer;
lpWSPSend: Pointer;
lpWSPSendDisconnect: Pointer;
lpWSPSendTo: Pointer;
lpWSPSetSockOpt: Pointer;
lpWSPShutdown: Pointer;
lpWSPSocket: Pointer;
lpWSPStringToAddress: Pointer;
end;const WSPPROC_TABLE = extern struct {
lpWSPAccept: ?*anyopaque,
lpWSPAddressToString: ?*anyopaque,
lpWSPAsyncSelect: ?*anyopaque,
lpWSPBind: ?*anyopaque,
lpWSPCancelBlockingCall: ?*anyopaque,
lpWSPCleanup: ?*anyopaque,
lpWSPCloseSocket: ?*anyopaque,
lpWSPConnect: ?*anyopaque,
lpWSPDuplicateSocket: ?*anyopaque,
lpWSPEnumNetworkEvents: ?*anyopaque,
lpWSPEventSelect: ?*anyopaque,
lpWSPGetOverlappedResult: ?*anyopaque,
lpWSPGetPeerName: ?*anyopaque,
lpWSPGetSockName: ?*anyopaque,
lpWSPGetSockOpt: ?*anyopaque,
lpWSPGetQOSByName: ?*anyopaque,
lpWSPIoctl: ?*anyopaque,
lpWSPJoinLeaf: ?*anyopaque,
lpWSPListen: ?*anyopaque,
lpWSPRecv: ?*anyopaque,
lpWSPRecvDisconnect: ?*anyopaque,
lpWSPRecvFrom: ?*anyopaque,
lpWSPSelect: ?*anyopaque,
lpWSPSend: ?*anyopaque,
lpWSPSendDisconnect: ?*anyopaque,
lpWSPSendTo: ?*anyopaque,
lpWSPSetSockOpt: ?*anyopaque,
lpWSPShutdown: ?*anyopaque,
lpWSPSocket: ?*anyopaque,
lpWSPStringToAddress: ?*anyopaque,
};type
WSPPROC_TABLE {.bycopy.} = object
lpWSPAccept: pointer
lpWSPAddressToString: pointer
lpWSPAsyncSelect: pointer
lpWSPBind: pointer
lpWSPCancelBlockingCall: pointer
lpWSPCleanup: pointer
lpWSPCloseSocket: pointer
lpWSPConnect: pointer
lpWSPDuplicateSocket: pointer
lpWSPEnumNetworkEvents: pointer
lpWSPEventSelect: pointer
lpWSPGetOverlappedResult: pointer
lpWSPGetPeerName: pointer
lpWSPGetSockName: pointer
lpWSPGetSockOpt: pointer
lpWSPGetQOSByName: pointer
lpWSPIoctl: pointer
lpWSPJoinLeaf: pointer
lpWSPListen: pointer
lpWSPRecv: pointer
lpWSPRecvDisconnect: pointer
lpWSPRecvFrom: pointer
lpWSPSelect: pointer
lpWSPSend: pointer
lpWSPSendDisconnect: pointer
lpWSPSendTo: pointer
lpWSPSetSockOpt: pointer
lpWSPShutdown: pointer
lpWSPSocket: pointer
lpWSPStringToAddress: pointerstruct WSPPROC_TABLE
{
void* lpWSPAccept;
void* lpWSPAddressToString;
void* lpWSPAsyncSelect;
void* lpWSPBind;
void* lpWSPCancelBlockingCall;
void* lpWSPCleanup;
void* lpWSPCloseSocket;
void* lpWSPConnect;
void* lpWSPDuplicateSocket;
void* lpWSPEnumNetworkEvents;
void* lpWSPEventSelect;
void* lpWSPGetOverlappedResult;
void* lpWSPGetPeerName;
void* lpWSPGetSockName;
void* lpWSPGetSockOpt;
void* lpWSPGetQOSByName;
void* lpWSPIoctl;
void* lpWSPJoinLeaf;
void* lpWSPListen;
void* lpWSPRecv;
void* lpWSPRecvDisconnect;
void* lpWSPRecvFrom;
void* lpWSPSelect;
void* lpWSPSend;
void* lpWSPSendDisconnect;
void* lpWSPSendTo;
void* lpWSPSetSockOpt;
void* lpWSPShutdown;
void* lpWSPSocket;
void* lpWSPStringToAddress;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WSPPROC_TABLE サイズ: 120 バイト(x86)
dim st, 30 ; 4byte整数×30(構造体サイズ 120 / 4 切り上げ)
; lpWSPAccept : LPWSPACCEPT (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; lpWSPAddressToString : LPWSPADDRESSTOSTRING (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; lpWSPAsyncSelect : LPWSPASYNCSELECT (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; lpWSPBind : LPWSPBIND (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; lpWSPCancelBlockingCall : LPWSPCANCELBLOCKINGCALL (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; lpWSPCleanup : LPWSPCLEANUP (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; lpWSPCloseSocket : LPWSPCLOSESOCKET (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; lpWSPConnect : LPWSPCONNECT (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; lpWSPDuplicateSocket : LPWSPDUPLICATESOCKET (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; lpWSPEnumNetworkEvents : LPWSPENUMNETWORKEVENTS (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; lpWSPEventSelect : LPWSPEVENTSELECT (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; lpWSPGetOverlappedResult : LPWSPGETOVERLAPPEDRESULT (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; lpWSPGetPeerName : LPWSPGETPEERNAME (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; lpWSPGetSockName : LPWSPGETSOCKNAME (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; lpWSPGetSockOpt : LPWSPGETSOCKOPT (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; lpWSPGetQOSByName : LPWSPGETQOSBYNAME (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; lpWSPIoctl : LPWSPIOCTL (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; lpWSPJoinLeaf : LPWSPJOINLEAF (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; lpWSPListen : LPWSPLISTEN (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; lpWSPRecv : LPWSPRECV (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; lpWSPRecvDisconnect : LPWSPRECVDISCONNECT (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; lpWSPRecvFrom : LPWSPRECVFROM (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; lpWSPSelect : LPWSPSELECT (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; lpWSPSend : LPWSPSEND (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; lpWSPSendDisconnect : LPWSPSENDDISCONNECT (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; lpWSPSendTo : LPWSPSENDTO (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; lpWSPSetSockOpt : LPWSPSETSOCKOPT (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; lpWSPShutdown : LPWSPSHUTDOWN (+108, 4byte) st.27 = 値 / 値 = st.27 (lpoke/lpeek も可)
; lpWSPSocket : LPWSPSOCKET (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; lpWSPStringToAddress : LPWSPSTRINGTOADDRESS (+116, 4byte) st.29 = 値 / 値 = st.29 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WSPPROC_TABLE サイズ: 240 バイト(x64)
dim st, 60 ; 4byte整数×60(構造体サイズ 240 / 4 切り上げ)
; lpWSPAccept : LPWSPACCEPT (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; lpWSPAddressToString : LPWSPADDRESSTOSTRING (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; lpWSPAsyncSelect : LPWSPASYNCSELECT (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; lpWSPBind : LPWSPBIND (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; lpWSPCancelBlockingCall : LPWSPCANCELBLOCKINGCALL (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; lpWSPCleanup : LPWSPCLEANUP (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; lpWSPCloseSocket : LPWSPCLOSESOCKET (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; lpWSPConnect : LPWSPCONNECT (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; lpWSPDuplicateSocket : LPWSPDUPLICATESOCKET (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; lpWSPEnumNetworkEvents : LPWSPENUMNETWORKEVENTS (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; lpWSPEventSelect : LPWSPEVENTSELECT (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; lpWSPGetOverlappedResult : LPWSPGETOVERLAPPEDRESULT (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; lpWSPGetPeerName : LPWSPGETPEERNAME (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; lpWSPGetSockName : LPWSPGETSOCKNAME (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; lpWSPGetSockOpt : LPWSPGETSOCKOPT (+112, 8byte) qpoke st,112,値 / qpeek(st,112) ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; lpWSPGetQOSByName : LPWSPGETQOSBYNAME (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; lpWSPIoctl : LPWSPIOCTL (+128, 8byte) qpoke st,128,値 / qpeek(st,128) ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; lpWSPJoinLeaf : LPWSPJOINLEAF (+136, 8byte) qpoke st,136,値 / qpeek(st,136) ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; lpWSPListen : LPWSPLISTEN (+144, 8byte) qpoke st,144,値 / qpeek(st,144) ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; lpWSPRecv : LPWSPRECV (+152, 8byte) qpoke st,152,値 / qpeek(st,152) ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; lpWSPRecvDisconnect : LPWSPRECVDISCONNECT (+160, 8byte) qpoke st,160,値 / qpeek(st,160) ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; lpWSPRecvFrom : LPWSPRECVFROM (+168, 8byte) qpoke st,168,値 / qpeek(st,168) ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; lpWSPSelect : LPWSPSELECT (+176, 8byte) qpoke st,176,値 / qpeek(st,176) ※IronHSPのみ。3.7/3.8は lpoke st,176,下位 : lpoke st,180,上位
; lpWSPSend : LPWSPSEND (+184, 8byte) qpoke st,184,値 / qpeek(st,184) ※IronHSPのみ。3.7/3.8は lpoke st,184,下位 : lpoke st,188,上位
; lpWSPSendDisconnect : LPWSPSENDDISCONNECT (+192, 8byte) qpoke st,192,値 / qpeek(st,192) ※IronHSPのみ。3.7/3.8は lpoke st,192,下位 : lpoke st,196,上位
; lpWSPSendTo : LPWSPSENDTO (+200, 8byte) qpoke st,200,値 / qpeek(st,200) ※IronHSPのみ。3.7/3.8は lpoke st,200,下位 : lpoke st,204,上位
; lpWSPSetSockOpt : LPWSPSETSOCKOPT (+208, 8byte) qpoke st,208,値 / qpeek(st,208) ※IronHSPのみ。3.7/3.8は lpoke st,208,下位 : lpoke st,212,上位
; lpWSPShutdown : LPWSPSHUTDOWN (+216, 8byte) qpoke st,216,値 / qpeek(st,216) ※IronHSPのみ。3.7/3.8は lpoke st,216,下位 : lpoke st,220,上位
; lpWSPSocket : LPWSPSOCKET (+224, 8byte) qpoke st,224,値 / qpeek(st,224) ※IronHSPのみ。3.7/3.8は lpoke st,224,下位 : lpoke st,228,上位
; lpWSPStringToAddress : LPWSPSTRINGTOADDRESS (+232, 8byte) qpoke st,232,値 / qpeek(st,232) ※IronHSPのみ。3.7/3.8は lpoke st,232,下位 : lpoke st,236,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WSPPROC_TABLE
#field intptr lpWSPAccept
#field intptr lpWSPAddressToString
#field intptr lpWSPAsyncSelect
#field intptr lpWSPBind
#field intptr lpWSPCancelBlockingCall
#field intptr lpWSPCleanup
#field intptr lpWSPCloseSocket
#field intptr lpWSPConnect
#field intptr lpWSPDuplicateSocket
#field intptr lpWSPEnumNetworkEvents
#field intptr lpWSPEventSelect
#field intptr lpWSPGetOverlappedResult
#field intptr lpWSPGetPeerName
#field intptr lpWSPGetSockName
#field intptr lpWSPGetSockOpt
#field intptr lpWSPGetQOSByName
#field intptr lpWSPIoctl
#field intptr lpWSPJoinLeaf
#field intptr lpWSPListen
#field intptr lpWSPRecv
#field intptr lpWSPRecvDisconnect
#field intptr lpWSPRecvFrom
#field intptr lpWSPSelect
#field intptr lpWSPSend
#field intptr lpWSPSendDisconnect
#field intptr lpWSPSendTo
#field intptr lpWSPSetSockOpt
#field intptr lpWSPShutdown
#field intptr lpWSPSocket
#field intptr lpWSPStringToAddress
#endstruct
stdim st, WSPPROC_TABLE ; NSTRUCT 変数を確保