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

WsRequestReply

関数
チャネルで要求を送り応答を受信する。
DLLwebservices.dll呼出規約winapi対応OSWindows 7 以降

シグネチャ

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

HRESULT WsRequestReply(
    WS_CHANNEL* channel,
    WS_MESSAGE* requestMessage,
    const WS_MESSAGE_DESCRIPTION* requestMessageDescription,
    WS_WRITE_OPTION writeOption,
    const void* requestBodyValue,   // optional
    DWORD requestBodyValueSize,
    WS_MESSAGE* replyMessage,
    const WS_MESSAGE_DESCRIPTION* replyMessageDescription,
    WS_READ_OPTION readOption,
    WS_HEAP* heap,   // optional
    void* value,   // optional
    DWORD valueSize,
    const WS_ASYNC_CONTEXT* asyncContext,   // optional
    WS_ERROR* error   // optional
);

パラメーター

名前方向
channelWS_CHANNEL*in
requestMessageWS_MESSAGE*in
requestMessageDescriptionWS_MESSAGE_DESCRIPTION*in
writeOptionWS_WRITE_OPTIONin
requestBodyValuevoid*inoptional
requestBodyValueSizeDWORDin
replyMessageWS_MESSAGE*in
replyMessageDescriptionWS_MESSAGE_DESCRIPTION*in
readOptionWS_READ_OPTIONin
heapWS_HEAP*inoptional
valuevoid*outoptional
valueSizeDWORDin
asyncContextWS_ASYNC_CONTEXT*inoptional
errorWS_ERROR*inoptional

戻り値の型: HRESULT

各言語での呼び出し定義

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

HRESULT WsRequestReply(
    WS_CHANNEL* channel,
    WS_MESSAGE* requestMessage,
    const WS_MESSAGE_DESCRIPTION* requestMessageDescription,
    WS_WRITE_OPTION writeOption,
    const void* requestBodyValue,   // optional
    DWORD requestBodyValueSize,
    WS_MESSAGE* replyMessage,
    const WS_MESSAGE_DESCRIPTION* replyMessageDescription,
    WS_READ_OPTION readOption,
    WS_HEAP* heap,   // optional
    void* value,   // optional
    DWORD valueSize,
    const WS_ASYNC_CONTEXT* asyncContext,   // optional
    WS_ERROR* error   // optional
);
[DllImport("webservices.dll", ExactSpelling = true)]
static extern int WsRequestReply(
    ref IntPtr channel,   // WS_CHANNEL*
    ref IntPtr requestMessage,   // WS_MESSAGE*
    IntPtr requestMessageDescription,   // WS_MESSAGE_DESCRIPTION*
    int writeOption,   // WS_WRITE_OPTION
    IntPtr requestBodyValue,   // void* optional
    uint requestBodyValueSize,   // DWORD
    ref IntPtr replyMessage,   // WS_MESSAGE*
    IntPtr replyMessageDescription,   // WS_MESSAGE_DESCRIPTION*
    int readOption,   // WS_READ_OPTION
    IntPtr heap,   // WS_HEAP* optional
    IntPtr value,   // void* optional, out
    uint valueSize,   // DWORD
    IntPtr asyncContext,   // WS_ASYNC_CONTEXT* optional
    IntPtr error   // WS_ERROR* optional
);
<DllImport("webservices.dll", ExactSpelling:=True)>
Public Shared Function WsRequestReply(
    ByRef channel As IntPtr,   ' WS_CHANNEL*
    ByRef requestMessage As IntPtr,   ' WS_MESSAGE*
    requestMessageDescription As IntPtr,   ' WS_MESSAGE_DESCRIPTION*
    writeOption As Integer,   ' WS_WRITE_OPTION
    requestBodyValue As IntPtr,   ' void* optional
    requestBodyValueSize As UInteger,   ' DWORD
    ByRef replyMessage As IntPtr,   ' WS_MESSAGE*
    replyMessageDescription As IntPtr,   ' WS_MESSAGE_DESCRIPTION*
    readOption As Integer,   ' WS_READ_OPTION
    heap As IntPtr,   ' WS_HEAP* optional
    value As IntPtr,   ' void* optional, out
    valueSize As UInteger,   ' DWORD
    asyncContext As IntPtr,   ' WS_ASYNC_CONTEXT* optional
    [error] As IntPtr   ' WS_ERROR* optional
) As Integer
End Function
' channel : WS_CHANNEL*
' requestMessage : WS_MESSAGE*
' requestMessageDescription : WS_MESSAGE_DESCRIPTION*
' writeOption : WS_WRITE_OPTION
' requestBodyValue : void* optional
' requestBodyValueSize : DWORD
' replyMessage : WS_MESSAGE*
' replyMessageDescription : WS_MESSAGE_DESCRIPTION*
' readOption : WS_READ_OPTION
' heap : WS_HEAP* optional
' value : void* optional, out
' valueSize : DWORD
' asyncContext : WS_ASYNC_CONTEXT* optional
' error : WS_ERROR* optional
Declare PtrSafe Function WsRequestReply Lib "webservices" ( _
    ByRef channel As LongPtr, _
    ByRef requestMessage As LongPtr, _
    ByVal requestMessageDescription As LongPtr, _
    ByVal writeOption As Long, _
    ByVal requestBodyValue As LongPtr, _
    ByVal requestBodyValueSize As Long, _
    ByRef replyMessage As LongPtr, _
    ByVal replyMessageDescription As LongPtr, _
    ByVal readOption As Long, _
    ByVal heap As LongPtr, _
    ByVal value As LongPtr, _
    ByVal valueSize As Long, _
    ByVal asyncContext As LongPtr, _
    ByVal error As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

WsRequestReply = ctypes.windll.webservices.WsRequestReply
WsRequestReply.restype = ctypes.c_int
WsRequestReply.argtypes = [
    ctypes.c_void_p,  # channel : WS_CHANNEL*
    ctypes.c_void_p,  # requestMessage : WS_MESSAGE*
    ctypes.c_void_p,  # requestMessageDescription : WS_MESSAGE_DESCRIPTION*
    ctypes.c_int,  # writeOption : WS_WRITE_OPTION
    ctypes.POINTER(None),  # requestBodyValue : void* optional
    wintypes.DWORD,  # requestBodyValueSize : DWORD
    ctypes.c_void_p,  # replyMessage : WS_MESSAGE*
    ctypes.c_void_p,  # replyMessageDescription : WS_MESSAGE_DESCRIPTION*
    ctypes.c_int,  # readOption : WS_READ_OPTION
    ctypes.c_void_p,  # heap : WS_HEAP* optional
    ctypes.POINTER(None),  # value : void* optional, out
    wintypes.DWORD,  # valueSize : DWORD
    ctypes.c_void_p,  # asyncContext : WS_ASYNC_CONTEXT* optional
    ctypes.c_void_p,  # error : WS_ERROR* optional
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('webservices.dll')
WsRequestReply = Fiddle::Function.new(
  lib['WsRequestReply'],
  [
    Fiddle::TYPE_VOIDP,  # channel : WS_CHANNEL*
    Fiddle::TYPE_VOIDP,  # requestMessage : WS_MESSAGE*
    Fiddle::TYPE_VOIDP,  # requestMessageDescription : WS_MESSAGE_DESCRIPTION*
    Fiddle::TYPE_INT,  # writeOption : WS_WRITE_OPTION
    Fiddle::TYPE_VOIDP,  # requestBodyValue : void* optional
    -Fiddle::TYPE_INT,  # requestBodyValueSize : DWORD
    Fiddle::TYPE_VOIDP,  # replyMessage : WS_MESSAGE*
    Fiddle::TYPE_VOIDP,  # replyMessageDescription : WS_MESSAGE_DESCRIPTION*
    Fiddle::TYPE_INT,  # readOption : WS_READ_OPTION
    Fiddle::TYPE_VOIDP,  # heap : WS_HEAP* optional
    Fiddle::TYPE_VOIDP,  # value : void* optional, out
    -Fiddle::TYPE_INT,  # valueSize : DWORD
    Fiddle::TYPE_VOIDP,  # asyncContext : WS_ASYNC_CONTEXT* optional
    Fiddle::TYPE_VOIDP,  # error : WS_ERROR* optional
  ],
  Fiddle::TYPE_INT)
#[link(name = "webservices")]
extern "system" {
    fn WsRequestReply(
        channel: *mut isize,  // WS_CHANNEL*
        requestMessage: *mut isize,  // WS_MESSAGE*
        requestMessageDescription: *const WS_MESSAGE_DESCRIPTION,  // WS_MESSAGE_DESCRIPTION*
        writeOption: i32,  // WS_WRITE_OPTION
        requestBodyValue: *const (),  // void* optional
        requestBodyValueSize: u32,  // DWORD
        replyMessage: *mut isize,  // WS_MESSAGE*
        replyMessageDescription: *const WS_MESSAGE_DESCRIPTION,  // WS_MESSAGE_DESCRIPTION*
        readOption: i32,  // WS_READ_OPTION
        heap: *mut isize,  // WS_HEAP* optional
        value: *mut (),  // void* optional, out
        valueSize: u32,  // DWORD
        asyncContext: *const WS_ASYNC_CONTEXT,  // WS_ASYNC_CONTEXT* optional
        error: *mut isize  // WS_ERROR* optional
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("webservices.dll")]
public static extern int WsRequestReply(ref IntPtr channel, ref IntPtr requestMessage, IntPtr requestMessageDescription, int writeOption, IntPtr requestBodyValue, uint requestBodyValueSize, ref IntPtr replyMessage, IntPtr replyMessageDescription, int readOption, IntPtr heap, IntPtr value, uint valueSize, IntPtr asyncContext, IntPtr error);
"@
$api = Add-Type -MemberDefinition $sig -Name 'webservices_WsRequestReply' -Namespace Win32 -PassThru
# $api::WsRequestReply(channel, requestMessage, requestMessageDescription, writeOption, requestBodyValue, requestBodyValueSize, replyMessage, replyMessageDescription, readOption, heap, value, valueSize, asyncContext, error)
#uselib "webservices.dll"
#func global WsRequestReply "WsRequestReply" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; WsRequestReply channel, requestMessage, varptr(requestMessageDescription), writeOption, requestBodyValue, requestBodyValueSize, replyMessage, varptr(replyMessageDescription), readOption, heap, value, valueSize, varptr(asyncContext), error   ; 戻り値は stat
; channel : WS_CHANNEL* -> "sptr"
; requestMessage : WS_MESSAGE* -> "sptr"
; requestMessageDescription : WS_MESSAGE_DESCRIPTION* -> "sptr"
; writeOption : WS_WRITE_OPTION -> "sptr"
; requestBodyValue : void* optional -> "sptr"
; requestBodyValueSize : DWORD -> "sptr"
; replyMessage : WS_MESSAGE* -> "sptr"
; replyMessageDescription : WS_MESSAGE_DESCRIPTION* -> "sptr"
; readOption : WS_READ_OPTION -> "sptr"
; heap : WS_HEAP* optional -> "sptr"
; value : void* optional, out -> "sptr"
; valueSize : DWORD -> "sptr"
; asyncContext : WS_ASYNC_CONTEXT* optional -> "sptr"
; error : WS_ERROR* optional -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "webservices.dll"
#cfunc global WsRequestReply "WsRequestReply" int, int, var, int, sptr, int, int, var, int, int, sptr, int, var, int
; res = WsRequestReply(channel, requestMessage, requestMessageDescription, writeOption, requestBodyValue, requestBodyValueSize, replyMessage, replyMessageDescription, readOption, heap, value, valueSize, asyncContext, error)
; channel : WS_CHANNEL* -> "int"
; requestMessage : WS_MESSAGE* -> "int"
; requestMessageDescription : WS_MESSAGE_DESCRIPTION* -> "var"
; writeOption : WS_WRITE_OPTION -> "int"
; requestBodyValue : void* optional -> "sptr"
; requestBodyValueSize : DWORD -> "int"
; replyMessage : WS_MESSAGE* -> "int"
; replyMessageDescription : WS_MESSAGE_DESCRIPTION* -> "var"
; readOption : WS_READ_OPTION -> "int"
; heap : WS_HEAP* optional -> "int"
; value : void* optional, out -> "sptr"
; valueSize : DWORD -> "int"
; asyncContext : WS_ASYNC_CONTEXT* optional -> "var"
; error : WS_ERROR* optional -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; HRESULT WsRequestReply(WS_CHANNEL* channel, WS_MESSAGE* requestMessage, WS_MESSAGE_DESCRIPTION* requestMessageDescription, WS_WRITE_OPTION writeOption, void* requestBodyValue, DWORD requestBodyValueSize, WS_MESSAGE* replyMessage, WS_MESSAGE_DESCRIPTION* replyMessageDescription, WS_READ_OPTION readOption, WS_HEAP* heap, void* value, DWORD valueSize, WS_ASYNC_CONTEXT* asyncContext, WS_ERROR* error)
#uselib "webservices.dll"
#cfunc global WsRequestReply "WsRequestReply" int, int, var, int, intptr, int, int, var, int, int, intptr, int, var, int
; res = WsRequestReply(channel, requestMessage, requestMessageDescription, writeOption, requestBodyValue, requestBodyValueSize, replyMessage, replyMessageDescription, readOption, heap, value, valueSize, asyncContext, error)
; channel : WS_CHANNEL* -> "int"
; requestMessage : WS_MESSAGE* -> "int"
; requestMessageDescription : WS_MESSAGE_DESCRIPTION* -> "var"
; writeOption : WS_WRITE_OPTION -> "int"
; requestBodyValue : void* optional -> "intptr"
; requestBodyValueSize : DWORD -> "int"
; replyMessage : WS_MESSAGE* -> "int"
; replyMessageDescription : WS_MESSAGE_DESCRIPTION* -> "var"
; readOption : WS_READ_OPTION -> "int"
; heap : WS_HEAP* optional -> "int"
; value : void* optional, out -> "intptr"
; valueSize : DWORD -> "int"
; asyncContext : WS_ASYNC_CONTEXT* optional -> "var"
; error : WS_ERROR* optional -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	webservices = windows.NewLazySystemDLL("webservices.dll")
	procWsRequestReply = webservices.NewProc("WsRequestReply")
)

// channel (WS_CHANNEL*), requestMessage (WS_MESSAGE*), requestMessageDescription (WS_MESSAGE_DESCRIPTION*), writeOption (WS_WRITE_OPTION), requestBodyValue (void* optional), requestBodyValueSize (DWORD), replyMessage (WS_MESSAGE*), replyMessageDescription (WS_MESSAGE_DESCRIPTION*), readOption (WS_READ_OPTION), heap (WS_HEAP* optional), value (void* optional, out), valueSize (DWORD), asyncContext (WS_ASYNC_CONTEXT* optional), error (WS_ERROR* optional)
r1, _, err := procWsRequestReply.Call(
	uintptr(channel),
	uintptr(requestMessage),
	uintptr(requestMessageDescription),
	uintptr(writeOption),
	uintptr(requestBodyValue),
	uintptr(requestBodyValueSize),
	uintptr(replyMessage),
	uintptr(replyMessageDescription),
	uintptr(readOption),
	uintptr(heap),
	uintptr(value),
	uintptr(valueSize),
	uintptr(asyncContext),
	uintptr(error),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // HRESULT
function WsRequestReply(
  channel: Pointer;   // WS_CHANNEL*
  requestMessage: Pointer;   // WS_MESSAGE*
  requestMessageDescription: Pointer;   // WS_MESSAGE_DESCRIPTION*
  writeOption: Integer;   // WS_WRITE_OPTION
  requestBodyValue: Pointer;   // void* optional
  requestBodyValueSize: DWORD;   // DWORD
  replyMessage: Pointer;   // WS_MESSAGE*
  replyMessageDescription: Pointer;   // WS_MESSAGE_DESCRIPTION*
  readOption: Integer;   // WS_READ_OPTION
  heap: Pointer;   // WS_HEAP* optional
  value: Pointer;   // void* optional, out
  valueSize: DWORD;   // DWORD
  asyncContext: Pointer;   // WS_ASYNC_CONTEXT* optional
  error: Pointer   // WS_ERROR* optional
): Integer; stdcall;
  external 'webservices.dll' name 'WsRequestReply';
result := DllCall("webservices\WsRequestReply"
    , "Ptr", channel   ; WS_CHANNEL*
    , "Ptr", requestMessage   ; WS_MESSAGE*
    , "Ptr", requestMessageDescription   ; WS_MESSAGE_DESCRIPTION*
    , "Int", writeOption   ; WS_WRITE_OPTION
    , "Ptr", requestBodyValue   ; void* optional
    , "UInt", requestBodyValueSize   ; DWORD
    , "Ptr", replyMessage   ; WS_MESSAGE*
    , "Ptr", replyMessageDescription   ; WS_MESSAGE_DESCRIPTION*
    , "Int", readOption   ; WS_READ_OPTION
    , "Ptr", heap   ; WS_HEAP* optional
    , "Ptr", value   ; void* optional, out
    , "UInt", valueSize   ; DWORD
    , "Ptr", asyncContext   ; WS_ASYNC_CONTEXT* optional
    , "Ptr", error   ; WS_ERROR* optional
    , "Int")   ; return: HRESULT
●WsRequestReply(channel, requestMessage, requestMessageDescription, writeOption, requestBodyValue, requestBodyValueSize, replyMessage, replyMessageDescription, readOption, heap, value, valueSize, asyncContext, error) = DLL("webservices.dll", "int WsRequestReply(void*, void*, void*, int, void*, dword, void*, void*, int, void*, void*, dword, void*, void*)")
# 呼び出し: WsRequestReply(channel, requestMessage, requestMessageDescription, writeOption, requestBodyValue, requestBodyValueSize, replyMessage, replyMessageDescription, readOption, heap, value, valueSize, asyncContext, error)
# channel : WS_CHANNEL* -> "void*"
# requestMessage : WS_MESSAGE* -> "void*"
# requestMessageDescription : WS_MESSAGE_DESCRIPTION* -> "void*"
# writeOption : WS_WRITE_OPTION -> "int"
# requestBodyValue : void* optional -> "void*"
# requestBodyValueSize : DWORD -> "dword"
# replyMessage : WS_MESSAGE* -> "void*"
# replyMessageDescription : WS_MESSAGE_DESCRIPTION* -> "void*"
# readOption : WS_READ_OPTION -> "int"
# heap : WS_HEAP* optional -> "void*"
# value : void* optional, out -> "void*"
# valueSize : DWORD -> "dword"
# asyncContext : WS_ASYNC_CONTEXT* optional -> "void*"
# error : WS_ERROR* optional -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。