GetQueuedCompletionStatusEx
関数I/O完了ポートから複数の完了結果を一括取得する。
シグネチャ
// KERNEL32.dll
#include <windows.h>
BOOL GetQueuedCompletionStatusEx(
HANDLE CompletionPort,
OVERLAPPED_ENTRY* lpCompletionPortEntries,
DWORD ulCount,
DWORD* ulNumEntriesRemoved,
DWORD dwMilliseconds,
BOOL fAlertable
);パラメーター
| 名前 | 型 | 方向 |
|---|---|---|
| CompletionPort | HANDLE | in |
| lpCompletionPortEntries | OVERLAPPED_ENTRY* | out |
| ulCount | DWORD | in |
| ulNumEntriesRemoved | DWORD* | out |
| dwMilliseconds | DWORD | in |
| fAlertable | BOOL | in |
戻り値の型: BOOL
各言語での呼び出し定義
// KERNEL32.dll
#include <windows.h>
BOOL GetQueuedCompletionStatusEx(
HANDLE CompletionPort,
OVERLAPPED_ENTRY* lpCompletionPortEntries,
DWORD ulCount,
DWORD* ulNumEntriesRemoved,
DWORD dwMilliseconds,
BOOL fAlertable
);[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("KERNEL32.dll", SetLastError = true, ExactSpelling = true)]
static extern bool GetQueuedCompletionStatusEx(
IntPtr CompletionPort, // HANDLE
IntPtr lpCompletionPortEntries, // OVERLAPPED_ENTRY* out
uint ulCount, // DWORD
out uint ulNumEntriesRemoved, // DWORD* out
uint dwMilliseconds, // DWORD
bool fAlertable // BOOL
);<DllImport("KERNEL32.dll", SetLastError:=True, ExactSpelling:=True)>
Public Shared Function GetQueuedCompletionStatusEx(
CompletionPort As IntPtr, ' HANDLE
lpCompletionPortEntries As IntPtr, ' OVERLAPPED_ENTRY* out
ulCount As UInteger, ' DWORD
<Out> ByRef ulNumEntriesRemoved As UInteger, ' DWORD* out
dwMilliseconds As UInteger, ' DWORD
fAlertable As Boolean ' BOOL
) As Boolean
End Function' CompletionPort : HANDLE
' lpCompletionPortEntries : OVERLAPPED_ENTRY* out
' ulCount : DWORD
' ulNumEntriesRemoved : DWORD* out
' dwMilliseconds : DWORD
' fAlertable : BOOL
Declare PtrSafe Function GetQueuedCompletionStatusEx Lib "kernel32" ( _
ByVal CompletionPort As LongPtr, _
ByVal lpCompletionPortEntries As LongPtr, _
ByVal ulCount As Long, _
ByRef ulNumEntriesRemoved As Long, _
ByVal dwMilliseconds As Long, _
ByVal fAlertable As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
GetQueuedCompletionStatusEx = ctypes.windll.kernel32.GetQueuedCompletionStatusEx
GetQueuedCompletionStatusEx.restype = wintypes.BOOL
GetQueuedCompletionStatusEx.argtypes = [
wintypes.HANDLE, # CompletionPort : HANDLE
ctypes.c_void_p, # lpCompletionPortEntries : OVERLAPPED_ENTRY* out
wintypes.DWORD, # ulCount : DWORD
ctypes.POINTER(wintypes.DWORD), # ulNumEntriesRemoved : DWORD* out
wintypes.DWORD, # dwMilliseconds : DWORD
wintypes.BOOL, # fAlertable : BOOL
]
# GetLastError: use ctypes.GetLastError() (or ctypes.WinDLL(use_last_error=True))require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('KERNEL32.dll')
GetQueuedCompletionStatusEx = Fiddle::Function.new(
lib['GetQueuedCompletionStatusEx'],
[
Fiddle::TYPE_VOIDP, # CompletionPort : HANDLE
Fiddle::TYPE_VOIDP, # lpCompletionPortEntries : OVERLAPPED_ENTRY* out
-Fiddle::TYPE_INT, # ulCount : DWORD
Fiddle::TYPE_VOIDP, # ulNumEntriesRemoved : DWORD* out
-Fiddle::TYPE_INT, # dwMilliseconds : DWORD
Fiddle::TYPE_INT, # fAlertable : BOOL
],
Fiddle::TYPE_INT)#[link(name = "kernel32")]
extern "system" {
fn GetQueuedCompletionStatusEx(
CompletionPort: *mut core::ffi::c_void, // HANDLE
lpCompletionPortEntries: *mut OVERLAPPED_ENTRY, // OVERLAPPED_ENTRY* out
ulCount: u32, // DWORD
ulNumEntriesRemoved: *mut u32, // DWORD* out
dwMilliseconds: u32, // DWORD
fAlertable: i32 // BOOL
) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("KERNEL32.dll", SetLastError = true)]
public static extern bool GetQueuedCompletionStatusEx(IntPtr CompletionPort, IntPtr lpCompletionPortEntries, uint ulCount, out uint ulNumEntriesRemoved, uint dwMilliseconds, bool fAlertable);
"@
$api = Add-Type -MemberDefinition $sig -Name 'KERNEL32_GetQueuedCompletionStatusEx' -Namespace Win32 -PassThru
# $api::GetQueuedCompletionStatusEx(CompletionPort, lpCompletionPortEntries, ulCount, ulNumEntriesRemoved, dwMilliseconds, fAlertable)#uselib "KERNEL32.dll"
#func global GetQueuedCompletionStatusEx "GetQueuedCompletionStatusEx" sptr, sptr, sptr, sptr, sptr, sptr
; GetQueuedCompletionStatusEx CompletionPort, varptr(lpCompletionPortEntries), ulCount, varptr(ulNumEntriesRemoved), dwMilliseconds, fAlertable ; 戻り値は stat
; CompletionPort : HANDLE -> "sptr"
; lpCompletionPortEntries : OVERLAPPED_ENTRY* out -> "sptr"
; ulCount : DWORD -> "sptr"
; ulNumEntriesRemoved : DWORD* out -> "sptr"
; dwMilliseconds : DWORD -> "sptr"
; fAlertable : BOOL -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。出力引数:
#uselib "KERNEL32.dll" #cfunc global GetQueuedCompletionStatusEx "GetQueuedCompletionStatusEx" sptr, var, int, var, int, int ; res = GetQueuedCompletionStatusEx(CompletionPort, lpCompletionPortEntries, ulCount, ulNumEntriesRemoved, dwMilliseconds, fAlertable) ; CompletionPort : HANDLE -> "sptr" ; lpCompletionPortEntries : OVERLAPPED_ENTRY* out -> "var" ; ulCount : DWORD -> "int" ; ulNumEntriesRemoved : DWORD* out -> "var" ; dwMilliseconds : DWORD -> "int" ; fAlertable : BOOL -> "int" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "KERNEL32.dll" #cfunc global GetQueuedCompletionStatusEx "GetQueuedCompletionStatusEx" sptr, sptr, int, sptr, int, int ; res = GetQueuedCompletionStatusEx(CompletionPort, varptr(lpCompletionPortEntries), ulCount, varptr(ulNumEntriesRemoved), dwMilliseconds, fAlertable) ; CompletionPort : HANDLE -> "sptr" ; lpCompletionPortEntries : OVERLAPPED_ENTRY* out -> "sptr" ; ulCount : DWORD -> "int" ; ulNumEntriesRemoved : DWORD* out -> "sptr" ; dwMilliseconds : DWORD -> "int" ; fAlertable : BOOL -> "int" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
出力引数:
; BOOL GetQueuedCompletionStatusEx(HANDLE CompletionPort, OVERLAPPED_ENTRY* lpCompletionPortEntries, DWORD ulCount, DWORD* ulNumEntriesRemoved, DWORD dwMilliseconds, BOOL fAlertable) #uselib "KERNEL32.dll" #cfunc global GetQueuedCompletionStatusEx "GetQueuedCompletionStatusEx" intptr, var, int, var, int, int ; res = GetQueuedCompletionStatusEx(CompletionPort, lpCompletionPortEntries, ulCount, ulNumEntriesRemoved, dwMilliseconds, fAlertable) ; CompletionPort : HANDLE -> "intptr" ; lpCompletionPortEntries : OVERLAPPED_ENTRY* out -> "var" ; ulCount : DWORD -> "int" ; ulNumEntriesRemoved : DWORD* out -> "var" ; dwMilliseconds : DWORD -> "int" ; fAlertable : BOOL -> "int" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; BOOL GetQueuedCompletionStatusEx(HANDLE CompletionPort, OVERLAPPED_ENTRY* lpCompletionPortEntries, DWORD ulCount, DWORD* ulNumEntriesRemoved, DWORD dwMilliseconds, BOOL fAlertable) #uselib "KERNEL32.dll" #cfunc global GetQueuedCompletionStatusEx "GetQueuedCompletionStatusEx" intptr, intptr, int, intptr, int, int ; res = GetQueuedCompletionStatusEx(CompletionPort, varptr(lpCompletionPortEntries), ulCount, varptr(ulNumEntriesRemoved), dwMilliseconds, fAlertable) ; CompletionPort : HANDLE -> "intptr" ; lpCompletionPortEntries : OVERLAPPED_ENTRY* out -> "intptr" ; ulCount : DWORD -> "int" ; ulNumEntriesRemoved : DWORD* out -> "intptr" ; dwMilliseconds : DWORD -> "int" ; fAlertable : BOOL -> "int" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
kernel32 = windows.NewLazySystemDLL("KERNEL32.dll")
procGetQueuedCompletionStatusEx = kernel32.NewProc("GetQueuedCompletionStatusEx")
)
// CompletionPort (HANDLE), lpCompletionPortEntries (OVERLAPPED_ENTRY* out), ulCount (DWORD), ulNumEntriesRemoved (DWORD* out), dwMilliseconds (DWORD), fAlertable (BOOL)
r1, _, err := procGetQueuedCompletionStatusEx.Call(
uintptr(CompletionPort),
uintptr(lpCompletionPortEntries),
uintptr(ulCount),
uintptr(ulNumEntriesRemoved),
uintptr(dwMilliseconds),
uintptr(fAlertable),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // BOOLfunction GetQueuedCompletionStatusEx(
CompletionPort: THandle; // HANDLE
lpCompletionPortEntries: Pointer; // OVERLAPPED_ENTRY* out
ulCount: DWORD; // DWORD
ulNumEntriesRemoved: Pointer; // DWORD* out
dwMilliseconds: DWORD; // DWORD
fAlertable: BOOL // BOOL
): BOOL; stdcall;
external 'KERNEL32.dll' name 'GetQueuedCompletionStatusEx';result := DllCall("KERNEL32\GetQueuedCompletionStatusEx"
, "Ptr", CompletionPort ; HANDLE
, "Ptr", lpCompletionPortEntries ; OVERLAPPED_ENTRY* out
, "UInt", ulCount ; DWORD
, "Ptr", ulNumEntriesRemoved ; DWORD* out
, "UInt", dwMilliseconds ; DWORD
, "Int", fAlertable ; BOOL
, "Int") ; return: BOOL●GetQueuedCompletionStatusEx(CompletionPort, lpCompletionPortEntries, ulCount, ulNumEntriesRemoved, dwMilliseconds, fAlertable) = DLL("KERNEL32.dll", "bool GetQueuedCompletionStatusEx(void*, void*, dword, void*, dword, bool)")
# 呼び出し: GetQueuedCompletionStatusEx(CompletionPort, lpCompletionPortEntries, ulCount, ulNumEntriesRemoved, dwMilliseconds, fAlertable)
# CompletionPort : HANDLE -> "void*"
# lpCompletionPortEntries : OVERLAPPED_ENTRY* out -> "void*"
# ulCount : DWORD -> "dword"
# ulNumEntriesRemoved : DWORD* out -> "void*"
# dwMilliseconds : DWORD -> "dword"
# fAlertable : BOOL -> "bool"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。