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

RIO_EXTENSION_FUNCTION_TABLE

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

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0この構造体のサイズをバイト単位で示す。
RIOReceiveLPFN_RIORECEIVE8/4+8+4RIOReceive関数へのポインタ。登録バッファでの受信を行う。
RIOReceiveExLPFN_RIORECEIVEEX8/4+16+8RIOReceiveEx関数へのポインタ。拡張受信を行う。
RIOSendLPFN_RIOSEND8/4+24+12RIOSend関数へのポインタ。登録バッファでの送信を行う。
RIOSendExLPFN_RIOSENDEX8/4+32+16RIOSendEx関数へのポインタ。拡張送信を行う。
RIOCloseCompletionQueueLPFN_RIOCLOSECOMPLETIONQUEUE8/4+40+20RIOCloseCompletionQueue関数へのポインタ。完了キューを閉じる。
RIOCreateCompletionQueueLPFN_RIOCREATECOMPLETIONQUEUE8/4+48+24RIOCreateCompletionQueue関数へのポインタ。完了キューを作成する。
RIOCreateRequestQueueLPFN_RIOCREATEREQUESTQUEUE8/4+56+28RIOCreateRequestQueue関数へのポインタ。要求キューを作成する。
RIODequeueCompletionLPFN_RIODEQUEUECOMPLETION8/4+64+32RIODequeueCompletion関数へのポインタ。完了結果を取り出す。
RIODeregisterBufferLPFN_RIODEREGISTERBUFFER8/4+72+36RIODeregisterBuffer関数へのポインタ。バッファ登録を解除する。
RIONotifyLPFN_RIONOTIFY8/4+80+40RIONotify関数へのポインタ。完了通知を要求する。
RIORegisterBufferLPFN_RIOREGISTERBUFFER8/4+88+44RIORegisterBuffer関数へのポインタ。バッファを登録する。
RIOResizeCompletionQueueLPFN_RIORESIZECOMPLETIONQUEUE8/4+96+48RIOResizeCompletionQueue関数へのポインタ。完了キューを再サイズする。
RIOResizeRequestQueueLPFN_RIORESIZEREQUESTQUEUE8/4+104+52RIOResizeRequestQueue関数へのポインタ。要求キューを再サイズする。

各言語での定義

#include <windows.h>

// RIO_EXTENSION_FUNCTION_TABLE  (x64 112 / x86 56 バイト)
typedef struct RIO_EXTENSION_FUNCTION_TABLE {
    DWORD cbSize;
    LPFN_RIORECEIVE RIOReceive;
    LPFN_RIORECEIVEEX RIOReceiveEx;
    LPFN_RIOSEND RIOSend;
    LPFN_RIOSENDEX RIOSendEx;
    LPFN_RIOCLOSECOMPLETIONQUEUE RIOCloseCompletionQueue;
    LPFN_RIOCREATECOMPLETIONQUEUE RIOCreateCompletionQueue;
    LPFN_RIOCREATEREQUESTQUEUE RIOCreateRequestQueue;
    LPFN_RIODEQUEUECOMPLETION RIODequeueCompletion;
    LPFN_RIODEREGISTERBUFFER RIODeregisterBuffer;
    LPFN_RIONOTIFY RIONotify;
    LPFN_RIOREGISTERBUFFER RIORegisterBuffer;
    LPFN_RIORESIZECOMPLETIONQUEUE RIOResizeCompletionQueue;
    LPFN_RIORESIZEREQUESTQUEUE RIOResizeRequestQueue;
} RIO_EXTENSION_FUNCTION_TABLE;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RIO_EXTENSION_FUNCTION_TABLE
{
    public uint cbSize;
    public IntPtr RIOReceive;
    public IntPtr RIOReceiveEx;
    public IntPtr RIOSend;
    public IntPtr RIOSendEx;
    public IntPtr RIOCloseCompletionQueue;
    public IntPtr RIOCreateCompletionQueue;
    public IntPtr RIOCreateRequestQueue;
    public IntPtr RIODequeueCompletion;
    public IntPtr RIODeregisterBuffer;
    public IntPtr RIONotify;
    public IntPtr RIORegisterBuffer;
    public IntPtr RIOResizeCompletionQueue;
    public IntPtr RIOResizeRequestQueue;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RIO_EXTENSION_FUNCTION_TABLE
    Public cbSize As UInteger
    Public RIOReceive As IntPtr
    Public RIOReceiveEx As IntPtr
    Public RIOSend As IntPtr
    Public RIOSendEx As IntPtr
    Public RIOCloseCompletionQueue As IntPtr
    Public RIOCreateCompletionQueue As IntPtr
    Public RIOCreateRequestQueue As IntPtr
    Public RIODequeueCompletion As IntPtr
    Public RIODeregisterBuffer As IntPtr
    Public RIONotify As IntPtr
    Public RIORegisterBuffer As IntPtr
    Public RIOResizeCompletionQueue As IntPtr
    Public RIOResizeRequestQueue As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class RIO_EXTENSION_FUNCTION_TABLE(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("RIOReceive", ctypes.c_void_p),
        ("RIOReceiveEx", ctypes.c_void_p),
        ("RIOSend", ctypes.c_void_p),
        ("RIOSendEx", ctypes.c_void_p),
        ("RIOCloseCompletionQueue", ctypes.c_void_p),
        ("RIOCreateCompletionQueue", ctypes.c_void_p),
        ("RIOCreateRequestQueue", ctypes.c_void_p),
        ("RIODequeueCompletion", ctypes.c_void_p),
        ("RIODeregisterBuffer", ctypes.c_void_p),
        ("RIONotify", ctypes.c_void_p),
        ("RIORegisterBuffer", ctypes.c_void_p),
        ("RIOResizeCompletionQueue", ctypes.c_void_p),
        ("RIOResizeRequestQueue", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct RIO_EXTENSION_FUNCTION_TABLE {
    pub cbSize: u32,
    pub RIOReceive: *mut core::ffi::c_void,
    pub RIOReceiveEx: *mut core::ffi::c_void,
    pub RIOSend: *mut core::ffi::c_void,
    pub RIOSendEx: *mut core::ffi::c_void,
    pub RIOCloseCompletionQueue: *mut core::ffi::c_void,
    pub RIOCreateCompletionQueue: *mut core::ffi::c_void,
    pub RIOCreateRequestQueue: *mut core::ffi::c_void,
    pub RIODequeueCompletion: *mut core::ffi::c_void,
    pub RIODeregisterBuffer: *mut core::ffi::c_void,
    pub RIONotify: *mut core::ffi::c_void,
    pub RIORegisterBuffer: *mut core::ffi::c_void,
    pub RIOResizeCompletionQueue: *mut core::ffi::c_void,
    pub RIOResizeRequestQueue: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type RIO_EXTENSION_FUNCTION_TABLE struct {
	cbSize uint32
	RIOReceive uintptr
	RIOReceiveEx uintptr
	RIOSend uintptr
	RIOSendEx uintptr
	RIOCloseCompletionQueue uintptr
	RIOCreateCompletionQueue uintptr
	RIOCreateRequestQueue uintptr
	RIODequeueCompletion uintptr
	RIODeregisterBuffer uintptr
	RIONotify uintptr
	RIORegisterBuffer uintptr
	RIOResizeCompletionQueue uintptr
	RIOResizeRequestQueue uintptr
}
type
  RIO_EXTENSION_FUNCTION_TABLE = record
    cbSize: DWORD;
    RIOReceive: Pointer;
    RIOReceiveEx: Pointer;
    RIOSend: Pointer;
    RIOSendEx: Pointer;
    RIOCloseCompletionQueue: Pointer;
    RIOCreateCompletionQueue: Pointer;
    RIOCreateRequestQueue: Pointer;
    RIODequeueCompletion: Pointer;
    RIODeregisterBuffer: Pointer;
    RIONotify: Pointer;
    RIORegisterBuffer: Pointer;
    RIOResizeCompletionQueue: Pointer;
    RIOResizeRequestQueue: Pointer;
  end;
const RIO_EXTENSION_FUNCTION_TABLE = extern struct {
    cbSize: u32,
    RIOReceive: ?*anyopaque,
    RIOReceiveEx: ?*anyopaque,
    RIOSend: ?*anyopaque,
    RIOSendEx: ?*anyopaque,
    RIOCloseCompletionQueue: ?*anyopaque,
    RIOCreateCompletionQueue: ?*anyopaque,
    RIOCreateRequestQueue: ?*anyopaque,
    RIODequeueCompletion: ?*anyopaque,
    RIODeregisterBuffer: ?*anyopaque,
    RIONotify: ?*anyopaque,
    RIORegisterBuffer: ?*anyopaque,
    RIOResizeCompletionQueue: ?*anyopaque,
    RIOResizeRequestQueue: ?*anyopaque,
};
type
  RIO_EXTENSION_FUNCTION_TABLE {.bycopy.} = object
    cbSize: uint32
    RIOReceive: pointer
    RIOReceiveEx: pointer
    RIOSend: pointer
    RIOSendEx: pointer
    RIOCloseCompletionQueue: pointer
    RIOCreateCompletionQueue: pointer
    RIOCreateRequestQueue: pointer
    RIODequeueCompletion: pointer
    RIODeregisterBuffer: pointer
    RIONotify: pointer
    RIORegisterBuffer: pointer
    RIOResizeCompletionQueue: pointer
    RIOResizeRequestQueue: pointer
struct RIO_EXTENSION_FUNCTION_TABLE
{
    uint cbSize;
    void* RIOReceive;
    void* RIOReceiveEx;
    void* RIOSend;
    void* RIOSendEx;
    void* RIOCloseCompletionQueue;
    void* RIOCreateCompletionQueue;
    void* RIOCreateRequestQueue;
    void* RIODequeueCompletion;
    void* RIODeregisterBuffer;
    void* RIONotify;
    void* RIORegisterBuffer;
    void* RIOResizeCompletionQueue;
    void* RIOResizeRequestQueue;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; RIO_EXTENSION_FUNCTION_TABLE サイズ: 56 バイト(x86)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; RIOReceive : LPFN_RIORECEIVE (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; RIOReceiveEx : LPFN_RIORECEIVEEX (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; RIOSend : LPFN_RIOSEND (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; RIOSendEx : LPFN_RIOSENDEX (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; RIOCloseCompletionQueue : LPFN_RIOCLOSECOMPLETIONQUEUE (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; RIOCreateCompletionQueue : LPFN_RIOCREATECOMPLETIONQUEUE (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; RIOCreateRequestQueue : LPFN_RIOCREATEREQUESTQUEUE (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; RIODequeueCompletion : LPFN_RIODEQUEUECOMPLETION (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; RIODeregisterBuffer : LPFN_RIODEREGISTERBUFFER (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; RIONotify : LPFN_RIONOTIFY (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; RIORegisterBuffer : LPFN_RIOREGISTERBUFFER (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; RIOResizeCompletionQueue : LPFN_RIORESIZECOMPLETIONQUEUE (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; RIOResizeRequestQueue : LPFN_RIORESIZEREQUESTQUEUE (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RIO_EXTENSION_FUNCTION_TABLE サイズ: 112 バイト(x64)
dim st, 28    ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; RIOReceive : LPFN_RIORECEIVE (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; RIOReceiveEx : LPFN_RIORECEIVEEX (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; RIOSend : LPFN_RIOSEND (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; RIOSendEx : LPFN_RIOSENDEX (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; RIOCloseCompletionQueue : LPFN_RIOCLOSECOMPLETIONQUEUE (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; RIOCreateCompletionQueue : LPFN_RIOCREATECOMPLETIONQUEUE (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; RIOCreateRequestQueue : LPFN_RIOCREATEREQUESTQUEUE (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; RIODequeueCompletion : LPFN_RIODEQUEUECOMPLETION (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; RIODeregisterBuffer : LPFN_RIODEREGISTERBUFFER (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; RIONotify : LPFN_RIONOTIFY (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; RIORegisterBuffer : LPFN_RIOREGISTERBUFFER (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; RIOResizeCompletionQueue : LPFN_RIORESIZECOMPLETIONQUEUE (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; RIOResizeRequestQueue : LPFN_RIORESIZEREQUESTQUEUE (+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 RIO_EXTENSION_FUNCTION_TABLE
    #field int cbSize
    #field intptr RIOReceive
    #field intptr RIOReceiveEx
    #field intptr RIOSend
    #field intptr RIOSendEx
    #field intptr RIOCloseCompletionQueue
    #field intptr RIOCreateCompletionQueue
    #field intptr RIOCreateRequestQueue
    #field intptr RIODequeueCompletion
    #field intptr RIODeregisterBuffer
    #field intptr RIONotify
    #field intptr RIORegisterBuffer
    #field intptr RIOResizeCompletionQueue
    #field intptr RIOResizeRequestQueue
#endstruct

stdim st, RIO_EXTENSION_FUNCTION_TABLE        ; NSTRUCT 変数を確保
st->cbSize = 100
mes "cbSize=" + st->cbSize