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

WebSocketGetAction

関数
WebSocketで次に実行すべきアクションを取得する。
DLLwebsocket.dll呼出規約winapi対応OSwindows8.0

シグネチャ

// websocket.dll
#include <windows.h>

HRESULT WebSocketGetAction(
    WEB_SOCKET_HANDLE hWebSocket,
    WEB_SOCKET_ACTION_QUEUE eActionQueue,
    WEB_SOCKET_BUFFER* pDataBuffers,
    DWORD* pulDataBufferCount,
    WEB_SOCKET_ACTION* pAction,
    WEB_SOCKET_BUFFER_TYPE* pBufferType,
    void** pvApplicationContext,   // optional
    void** pvActionContext
);

パラメーター

名前方向
hWebSocketWEB_SOCKET_HANDLEin
eActionQueueWEB_SOCKET_ACTION_QUEUEin
pDataBuffersWEB_SOCKET_BUFFER*inout
pulDataBufferCountDWORD*inout
pActionWEB_SOCKET_ACTION*out
pBufferTypeWEB_SOCKET_BUFFER_TYPE*out
pvApplicationContextvoid**outoptional
pvActionContextvoid**out

戻り値の型: HRESULT

各言語での呼び出し定義

// websocket.dll
#include <windows.h>

HRESULT WebSocketGetAction(
    WEB_SOCKET_HANDLE hWebSocket,
    WEB_SOCKET_ACTION_QUEUE eActionQueue,
    WEB_SOCKET_BUFFER* pDataBuffers,
    DWORD* pulDataBufferCount,
    WEB_SOCKET_ACTION* pAction,
    WEB_SOCKET_BUFFER_TYPE* pBufferType,
    void** pvApplicationContext,   // optional
    void** pvActionContext
);
[DllImport("websocket.dll", ExactSpelling = true)]
static extern int WebSocketGetAction(
    IntPtr hWebSocket,   // WEB_SOCKET_HANDLE
    int eActionQueue,   // WEB_SOCKET_ACTION_QUEUE
    IntPtr pDataBuffers,   // WEB_SOCKET_BUFFER* in/out
    ref uint pulDataBufferCount,   // DWORD* in/out
    out int pAction,   // WEB_SOCKET_ACTION* out
    out int pBufferType,   // WEB_SOCKET_BUFFER_TYPE* out
    IntPtr pvApplicationContext,   // void** optional, out
    IntPtr pvActionContext   // void** out
);
<DllImport("websocket.dll", ExactSpelling:=True)>
Public Shared Function WebSocketGetAction(
    hWebSocket As IntPtr,   ' WEB_SOCKET_HANDLE
    eActionQueue As Integer,   ' WEB_SOCKET_ACTION_QUEUE
    pDataBuffers As IntPtr,   ' WEB_SOCKET_BUFFER* in/out
    ByRef pulDataBufferCount As UInteger,   ' DWORD* in/out
    <Out> ByRef pAction As Integer,   ' WEB_SOCKET_ACTION* out
    <Out> ByRef pBufferType As Integer,   ' WEB_SOCKET_BUFFER_TYPE* out
    pvApplicationContext As IntPtr,   ' void** optional, out
    pvActionContext As IntPtr   ' void** out
) As Integer
End Function
' hWebSocket : WEB_SOCKET_HANDLE
' eActionQueue : WEB_SOCKET_ACTION_QUEUE
' pDataBuffers : WEB_SOCKET_BUFFER* in/out
' pulDataBufferCount : DWORD* in/out
' pAction : WEB_SOCKET_ACTION* out
' pBufferType : WEB_SOCKET_BUFFER_TYPE* out
' pvApplicationContext : void** optional, out
' pvActionContext : void** out
Declare PtrSafe Function WebSocketGetAction Lib "websocket" ( _
    ByVal hWebSocket As LongPtr, _
    ByVal eActionQueue As Long, _
    ByVal pDataBuffers As LongPtr, _
    ByRef pulDataBufferCount As Long, _
    ByRef pAction As Long, _
    ByRef pBufferType As Long, _
    ByVal pvApplicationContext As LongPtr, _
    ByVal pvActionContext As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

WebSocketGetAction = ctypes.windll.websocket.WebSocketGetAction
WebSocketGetAction.restype = ctypes.c_int
WebSocketGetAction.argtypes = [
    wintypes.HANDLE,  # hWebSocket : WEB_SOCKET_HANDLE
    ctypes.c_int,  # eActionQueue : WEB_SOCKET_ACTION_QUEUE
    ctypes.c_void_p,  # pDataBuffers : WEB_SOCKET_BUFFER* in/out
    ctypes.POINTER(wintypes.DWORD),  # pulDataBufferCount : DWORD* in/out
    ctypes.c_void_p,  # pAction : WEB_SOCKET_ACTION* out
    ctypes.c_void_p,  # pBufferType : WEB_SOCKET_BUFFER_TYPE* out
    ctypes.c_void_p,  # pvApplicationContext : void** optional, out
    ctypes.c_void_p,  # pvActionContext : void** out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('websocket.dll')
WebSocketGetAction = Fiddle::Function.new(
  lib['WebSocketGetAction'],
  [
    Fiddle::TYPE_VOIDP,  # hWebSocket : WEB_SOCKET_HANDLE
    Fiddle::TYPE_INT,  # eActionQueue : WEB_SOCKET_ACTION_QUEUE
    Fiddle::TYPE_VOIDP,  # pDataBuffers : WEB_SOCKET_BUFFER* in/out
    Fiddle::TYPE_VOIDP,  # pulDataBufferCount : DWORD* in/out
    Fiddle::TYPE_VOIDP,  # pAction : WEB_SOCKET_ACTION* out
    Fiddle::TYPE_VOIDP,  # pBufferType : WEB_SOCKET_BUFFER_TYPE* out
    Fiddle::TYPE_VOIDP,  # pvApplicationContext : void** optional, out
    Fiddle::TYPE_VOIDP,  # pvActionContext : void** out
  ],
  Fiddle::TYPE_INT)
#[link(name = "websocket")]
extern "system" {
    fn WebSocketGetAction(
        hWebSocket: *mut core::ffi::c_void,  // WEB_SOCKET_HANDLE
        eActionQueue: i32,  // WEB_SOCKET_ACTION_QUEUE
        pDataBuffers: *mut WEB_SOCKET_BUFFER,  // WEB_SOCKET_BUFFER* in/out
        pulDataBufferCount: *mut u32,  // DWORD* in/out
        pAction: *mut i32,  // WEB_SOCKET_ACTION* out
        pBufferType: *mut i32,  // WEB_SOCKET_BUFFER_TYPE* out
        pvApplicationContext: *mut *mut (),  // void** optional, out
        pvActionContext: *mut *mut ()  // void** out
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("websocket.dll")]
public static extern int WebSocketGetAction(IntPtr hWebSocket, int eActionQueue, IntPtr pDataBuffers, ref uint pulDataBufferCount, out int pAction, out int pBufferType, IntPtr pvApplicationContext, IntPtr pvActionContext);
"@
$api = Add-Type -MemberDefinition $sig -Name 'websocket_WebSocketGetAction' -Namespace Win32 -PassThru
# $api::WebSocketGetAction(hWebSocket, eActionQueue, pDataBuffers, pulDataBufferCount, pAction, pBufferType, pvApplicationContext, pvActionContext)
#uselib "websocket.dll"
#func global WebSocketGetAction "WebSocketGetAction" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; WebSocketGetAction hWebSocket, eActionQueue, varptr(pDataBuffers), varptr(pulDataBufferCount), pAction, pBufferType, pvApplicationContext, pvActionContext   ; 戻り値は stat
; hWebSocket : WEB_SOCKET_HANDLE -> "sptr"
; eActionQueue : WEB_SOCKET_ACTION_QUEUE -> "sptr"
; pDataBuffers : WEB_SOCKET_BUFFER* in/out -> "sptr"
; pulDataBufferCount : DWORD* in/out -> "sptr"
; pAction : WEB_SOCKET_ACTION* out -> "sptr"
; pBufferType : WEB_SOCKET_BUFFER_TYPE* out -> "sptr"
; pvApplicationContext : void** optional, out -> "sptr"
; pvActionContext : void** out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "websocket.dll"
#cfunc global WebSocketGetAction "WebSocketGetAction" sptr, int, var, var, int, int, sptr, sptr
; res = WebSocketGetAction(hWebSocket, eActionQueue, pDataBuffers, pulDataBufferCount, pAction, pBufferType, pvApplicationContext, pvActionContext)
; hWebSocket : WEB_SOCKET_HANDLE -> "sptr"
; eActionQueue : WEB_SOCKET_ACTION_QUEUE -> "int"
; pDataBuffers : WEB_SOCKET_BUFFER* in/out -> "var"
; pulDataBufferCount : DWORD* in/out -> "var"
; pAction : WEB_SOCKET_ACTION* out -> "int"
; pBufferType : WEB_SOCKET_BUFFER_TYPE* out -> "int"
; pvApplicationContext : void** optional, out -> "sptr"
; pvActionContext : void** out -> "sptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; HRESULT WebSocketGetAction(WEB_SOCKET_HANDLE hWebSocket, WEB_SOCKET_ACTION_QUEUE eActionQueue, WEB_SOCKET_BUFFER* pDataBuffers, DWORD* pulDataBufferCount, WEB_SOCKET_ACTION* pAction, WEB_SOCKET_BUFFER_TYPE* pBufferType, void** pvApplicationContext, void** pvActionContext)
#uselib "websocket.dll"
#cfunc global WebSocketGetAction "WebSocketGetAction" intptr, int, var, var, int, int, intptr, intptr
; res = WebSocketGetAction(hWebSocket, eActionQueue, pDataBuffers, pulDataBufferCount, pAction, pBufferType, pvApplicationContext, pvActionContext)
; hWebSocket : WEB_SOCKET_HANDLE -> "intptr"
; eActionQueue : WEB_SOCKET_ACTION_QUEUE -> "int"
; pDataBuffers : WEB_SOCKET_BUFFER* in/out -> "var"
; pulDataBufferCount : DWORD* in/out -> "var"
; pAction : WEB_SOCKET_ACTION* out -> "int"
; pBufferType : WEB_SOCKET_BUFFER_TYPE* out -> "int"
; pvApplicationContext : void** optional, out -> "intptr"
; pvActionContext : void** out -> "intptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	websocket = windows.NewLazySystemDLL("websocket.dll")
	procWebSocketGetAction = websocket.NewProc("WebSocketGetAction")
)

// hWebSocket (WEB_SOCKET_HANDLE), eActionQueue (WEB_SOCKET_ACTION_QUEUE), pDataBuffers (WEB_SOCKET_BUFFER* in/out), pulDataBufferCount (DWORD* in/out), pAction (WEB_SOCKET_ACTION* out), pBufferType (WEB_SOCKET_BUFFER_TYPE* out), pvApplicationContext (void** optional, out), pvActionContext (void** out)
r1, _, err := procWebSocketGetAction.Call(
	uintptr(hWebSocket),
	uintptr(eActionQueue),
	uintptr(pDataBuffers),
	uintptr(pulDataBufferCount),
	uintptr(pAction),
	uintptr(pBufferType),
	uintptr(pvApplicationContext),
	uintptr(pvActionContext),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // HRESULT
function WebSocketGetAction(
  hWebSocket: THandle;   // WEB_SOCKET_HANDLE
  eActionQueue: Integer;   // WEB_SOCKET_ACTION_QUEUE
  pDataBuffers: Pointer;   // WEB_SOCKET_BUFFER* in/out
  pulDataBufferCount: Pointer;   // DWORD* in/out
  pAction: Pointer;   // WEB_SOCKET_ACTION* out
  pBufferType: Pointer;   // WEB_SOCKET_BUFFER_TYPE* out
  pvApplicationContext: Pointer;   // void** optional, out
  pvActionContext: Pointer   // void** out
): Integer; stdcall;
  external 'websocket.dll' name 'WebSocketGetAction';
result := DllCall("websocket\WebSocketGetAction"
    , "Ptr", hWebSocket   ; WEB_SOCKET_HANDLE
    , "Int", eActionQueue   ; WEB_SOCKET_ACTION_QUEUE
    , "Ptr", pDataBuffers   ; WEB_SOCKET_BUFFER* in/out
    , "Ptr", pulDataBufferCount   ; DWORD* in/out
    , "Ptr", pAction   ; WEB_SOCKET_ACTION* out
    , "Ptr", pBufferType   ; WEB_SOCKET_BUFFER_TYPE* out
    , "Ptr", pvApplicationContext   ; void** optional, out
    , "Ptr", pvActionContext   ; void** out
    , "Int")   ; return: HRESULT
●WebSocketGetAction(hWebSocket, eActionQueue, pDataBuffers, pulDataBufferCount, pAction, pBufferType, pvApplicationContext, pvActionContext) = DLL("websocket.dll", "int WebSocketGetAction(void*, int, void*, void*, void*, void*, void*, void*)")
# 呼び出し: WebSocketGetAction(hWebSocket, eActionQueue, pDataBuffers, pulDataBufferCount, pAction, pBufferType, pvApplicationContext, pvActionContext)
# hWebSocket : WEB_SOCKET_HANDLE -> "void*"
# eActionQueue : WEB_SOCKET_ACTION_QUEUE -> "int"
# pDataBuffers : WEB_SOCKET_BUFFER* in/out -> "void*"
# pulDataBufferCount : DWORD* in/out -> "void*"
# pAction : WEB_SOCKET_ACTION* out -> "void*"
# pBufferType : WEB_SOCKET_BUFFER_TYPE* out -> "void*"
# pvApplicationContext : void** optional, out -> "void*"
# pvActionContext : void** out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。