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

WSPPROC_TABLE

構造体
サイズx64: 240 バイト / x86: 120 バイト

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

フィールド

フィールドサイズx64x86説明
lpWSPAcceptLPWSPACCEPT8/4+0+0LPWSPAccept 関数へのポインターです。
lpWSPAddressToStringLPWSPADDRESSTOSTRING8/4+8+4LPWSPAddressToString 関数へのポインターです。
lpWSPAsyncSelectLPWSPASYNCSELECT8/4+16+8LPWSPAsyncSelect 関数へのポインターです。
lpWSPBindLPWSPBIND8/4+24+12LPWSPBind 関数へのポインターです。
lpWSPCancelBlockingCallLPWSPCANCELBLOCKINGCALL8/4+32+16LPWSPCancelBlockingCall 関数へのポインターです。
lpWSPCleanupLPWSPCLEANUP8/4+40+20WSPCleanup 関数へのポインターです。
lpWSPCloseSocketLPWSPCLOSESOCKET8/4+48+24LPWSPCloseSocket 関数へのポインターです。
lpWSPConnectLPWSPCONNECT8/4+56+28LPWSPConnect 関数へのポインターです。
lpWSPDuplicateSocketLPWSPDUPLICATESOCKET8/4+64+32WSPDuplicateSocket 関数へのポインターです。
lpWSPEnumNetworkEventsLPWSPENUMNETWORKEVENTS8/4+72+36WSPEnumNetworkEvents 関数へのポインターです。
lpWSPEventSelectLPWSPEVENTSELECT8/4+80+40LPWSPEventSelect 関数へのポインターです。
lpWSPGetOverlappedResultLPWSPGETOVERLAPPEDRESULT8/4+88+44LPWSPGetOverlappedResult 関数へのポインターです。
lpWSPGetPeerNameLPWSPGETPEERNAME8/4+96+48 関数へのポインターです。
lpWSPGetSockNameLPWSPGETSOCKNAME8/4+104+52WSPGetSockName 関数へのポインターです。
lpWSPGetSockOptLPWSPGETSOCKOPT8/4+112+56LPWSPGetSockopt 関数へのポインターです。
lpWSPGetQOSByNameLPWSPGETQOSBYNAME8/4+120+60WSPGetQOSByName 関数へのポインターです。
lpWSPIoctlLPWSPIOCTL8/4+128+64LPWSPIoctl 関数へのポインターです。
lpWSPJoinLeafLPWSPJOINLEAF8/4+136+68LPWSPJoinLeaf 関数へのポインターです。
lpWSPListenLPWSPLISTEN8/4+144+72LPWSPListen 関数へのポインターです。
lpWSPRecvLPWSPRECV8/4+152+76LPWSPRecv 関数へのポインターです。
lpWSPRecvDisconnectLPWSPRECVDISCONNECT8/4+160+80WSPRecvDisconnect 関数へのポインターです。
lpWSPRecvFromLPWSPRECVFROM8/4+168+84LPWSPRecvFrom 関数へのポインターです。
lpWSPSelectLPWSPSELECT8/4+176+88LPWSPSelect 関数へのポインターです。
lpWSPSendLPWSPSEND8/4+184+92LPWSPSend 関数へのポインターです。
lpWSPSendDisconnectLPWSPSENDDISCONNECT8/4+192+96WSPSendDisconnect 関数へのポインターです。
lpWSPSendToLPWSPSENDTO8/4+200+100LPWSPSendTo 関数へのポインターです。
lpWSPSetSockOptLPWSPSETSOCKOPT8/4+208+104LPWSPSetSockOpt 関数へのポインターです。
lpWSPShutdownLPWSPSHUTDOWN8/4+216+108LPWSPShutdown 関数へのポインターです。
lpWSPSocketLPWSPSOCKET8/4+224+112LPWSPSocket 関数へのポインターです。
lpWSPStringToAddressLPWSPSTRINGTOADDRESS8/4+232+116LPWSPStringToAddress 関数へのポインターです。

公式ドキュメント

WSPPROC_TABLE 構造体は、サービスプロバイダー関数へのポインターのテーブルを格納します。

解説(Remarks)

WSPPROC_TABLE 構造体は、WSPStartup 関数が返すサービスプロバイダー関数へのポインターのテーブルを格納します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#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 Structure
import 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: pointer
struct 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 変数を確保