ホーム › Networking.WebSocket › WebSocketGetAction
WebSocketGetAction
関数WebSocketで次に実行すべきアクションを取得する。
シグネチャ
// 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
);パラメーター
| 名前 | 型 | 方向 |
|---|---|---|
| hWebSocket | WEB_SOCKET_HANDLE | in |
| eActionQueue | WEB_SOCKET_ACTION_QUEUE | in |
| pDataBuffers | WEB_SOCKET_BUFFER* | inout |
| pulDataBufferCount | DWORD* | inout |
| pAction | WEB_SOCKET_ACTION* | out |
| pBufferType | WEB_SOCKET_BUFFER_TYPE* | out |
| pvApplicationContext | void** | outoptional |
| pvActionContext | void** | 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 方式にも切替可。#uselib "websocket.dll" #cfunc global WebSocketGetAction "WebSocketGetAction" sptr, int, sptr, sptr, int, int, sptr, sptr ; res = WebSocketGetAction(hWebSocket, eActionQueue, varptr(pDataBuffers), varptr(pulDataBufferCount), pAction, pBufferType, pvApplicationContext, pvActionContext) ; hWebSocket : WEB_SOCKET_HANDLE -> "sptr" ; eActionQueue : WEB_SOCKET_ACTION_QUEUE -> "int" ; pDataBuffers : WEB_SOCKET_BUFFER* in/out -> "sptr" ; pulDataBufferCount : DWORD* in/out -> "sptr" ; pAction : WEB_SOCKET_ACTION* out -> "int" ; pBufferType : WEB_SOCKET_BUFFER_TYPE* out -> "int" ; pvApplicationContext : void** optional, out -> "sptr" ; pvActionContext : void** out -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは 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 方式にも切替可。; 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, intptr, intptr, int, int, intptr, intptr ; res = WebSocketGetAction(hWebSocket, eActionQueue, varptr(pDataBuffers), varptr(pulDataBufferCount), pAction, pBufferType, pvApplicationContext, pvActionContext) ; hWebSocket : WEB_SOCKET_HANDLE -> "intptr" ; eActionQueue : WEB_SOCKET_ACTION_QUEUE -> "int" ; pDataBuffers : WEB_SOCKET_BUFFER* in/out -> "intptr" ; pulDataBufferCount : DWORD* in/out -> "intptr" ; pAction : WEB_SOCKET_ACTION* out -> "int" ; pBufferType : WEB_SOCKET_BUFFER_TYPE* out -> "int" ; pvApplicationContext : void** optional, out -> "intptr" ; pvActionContext : void** out -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは 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 // HRESULTfunction 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)。