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+0WSPAccept関数へのポインタ。接続を受理する。
lpWSPAddressToStringLPWSPADDRESSTOSTRING8/4+8+4WSPAddressToString関数へのポインタ。アドレスを文字列化する。
lpWSPAsyncSelectLPWSPASYNCSELECT8/4+16+8WSPAsyncSelect関数へのポインタ。非同期イベント通知を設定する。
lpWSPBindLPWSPBIND8/4+24+12WSPBind関数へのポインタ。ソケットにアドレスを割り当てる。
lpWSPCancelBlockingCallLPWSPCANCELBLOCKINGCALL8/4+32+16WSPCancelBlockingCall関数へのポインタ。ブロッキング呼び出しを取り消す。
lpWSPCleanupLPWSPCLEANUP8/4+40+20WSPCleanup関数へのポインタ。プロバイダ利用を終了する。
lpWSPCloseSocketLPWSPCLOSESOCKET8/4+48+24WSPCloseSocket関数へのポインタ。ソケットを閉じる。
lpWSPConnectLPWSPCONNECT8/4+56+28WSPConnect関数へのポインタ。接続を確立する。
lpWSPDuplicateSocketLPWSPDUPLICATESOCKET8/4+64+32WSPDuplicateSocket関数へのポインタ。ソケットを複製する。
lpWSPEnumNetworkEventsLPWSPENUMNETWORKEVENTS8/4+72+36WSPEnumNetworkEvents関数へのポインタ。発生イベントを列挙する。
lpWSPEventSelectLPWSPEVENTSELECT8/4+80+40WSPEventSelect関数へのポインタ。イベントオブジェクトを関連付ける。
lpWSPGetOverlappedResultLPWSPGETOVERLAPPEDRESULT8/4+88+44WSPGetOverlappedResult関数へのポインタ。重複I/O結果を取得する。
lpWSPGetPeerNameLPWSPGETPEERNAME8/4+96+48WSPGetPeerName関数へのポインタ。接続先アドレスを取得する。
lpWSPGetSockNameLPWSPGETSOCKNAME8/4+104+52WSPGetSockName関数へのポインタ。ローカルアドレスを取得する。
lpWSPGetSockOptLPWSPGETSOCKOPT8/4+112+56WSPGetSockOpt関数へのポインタ。ソケットオプションを取得する。
lpWSPGetQOSByNameLPWSPGETQOSBYNAME8/4+120+60WSPGetQOSByName関数へのポインタ。名前からQoSテンプレートを取得する。
lpWSPIoctlLPWSPIOCTL8/4+128+64WSPIoctl関数へのポインタ。ソケット制御操作を行う。
lpWSPJoinLeafLPWSPJOINLEAF8/4+136+68WSPJoinLeaf関数へのポインタ。マルチポイントセッションに参加する。
lpWSPListenLPWSPLISTEN8/4+144+72WSPListen関数へのポインタ。接続待ち受けを開始する。
lpWSPRecvLPWSPRECV8/4+152+76WSPRecv関数へのポインタ。データを受信する。
lpWSPRecvDisconnectLPWSPRECVDISCONNECT8/4+160+80WSPRecvDisconnect関数へのポインタ。切断データを受信する。
lpWSPRecvFromLPWSPRECVFROM8/4+168+84WSPRecvFrom関数へのポインタ。送信元情報付きで受信する。
lpWSPSelectLPWSPSELECT8/4+176+88WSPSelect関数へのポインタ。ソケットの状態を監視する。
lpWSPSendLPWSPSEND8/4+184+92WSPSend関数へのポインタ。データを送信する。
lpWSPSendDisconnectLPWSPSENDDISCONNECT8/4+192+96WSPSendDisconnect関数へのポインタ。切断データを送信する。
lpWSPSendToLPWSPSENDTO8/4+200+100WSPSendTo関数へのポインタ。宛先指定で送信する。
lpWSPSetSockOptLPWSPSETSOCKOPT8/4+208+104WSPSetSockOpt関数へのポインタ。ソケットオプションを設定する。
lpWSPShutdownLPWSPSHUTDOWN8/4+216+108WSPShutdown関数へのポインタ。送受信を停止する。
lpWSPSocketLPWSPSOCKET8/4+224+112WSPSocket関数へのポインタ。ソケットを作成する。
lpWSPStringToAddressLPWSPSTRINGTOADDRESS8/4+232+116WSPStringToAddress関数へのポインタ。文字列をアドレスに変換する。

各言語での定義

#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 変数を確保