ホーム › Networking.WinHttp › WinHttpSetStatusCallback
WinHttpSetStatusCallback
関数WinHTTPハンドルに状態通知コールバックを設定する。
シグネチャ
// WINHTTP.dll
#include <windows.h>
WINHTTP_STATUS_CALLBACK WinHttpSetStatusCallback(
void* hInternet,
WINHTTP_STATUS_CALLBACK lpfnInternetCallback,
DWORD dwNotificationFlags,
UINT_PTR dwReserved
);パラメーター
| 名前 | 型 | 方向 |
|---|---|---|
| hInternet | void* | inout |
| lpfnInternetCallback | WINHTTP_STATUS_CALLBACK | in |
| dwNotificationFlags | DWORD | in |
| dwReserved | UINT_PTR | in |
戻り値の型: WINHTTP_STATUS_CALLBACK
各言語での呼び出し定義
// WINHTTP.dll
#include <windows.h>
WINHTTP_STATUS_CALLBACK WinHttpSetStatusCallback(
void* hInternet,
WINHTTP_STATUS_CALLBACK lpfnInternetCallback,
DWORD dwNotificationFlags,
UINT_PTR dwReserved
);[DllImport("WINHTTP.dll", SetLastError = true, ExactSpelling = true)]
static extern IntPtr WinHttpSetStatusCallback(
IntPtr hInternet, // void* in/out
IntPtr lpfnInternetCallback, // WINHTTP_STATUS_CALLBACK
uint dwNotificationFlags, // DWORD
UIntPtr dwReserved // UINT_PTR
);<DllImport("WINHTTP.dll", SetLastError:=True, ExactSpelling:=True)>
Public Shared Function WinHttpSetStatusCallback(
hInternet As IntPtr, ' void* in/out
lpfnInternetCallback As IntPtr, ' WINHTTP_STATUS_CALLBACK
dwNotificationFlags As UInteger, ' DWORD
dwReserved As UIntPtr ' UINT_PTR
) As IntPtr
End Function' hInternet : void* in/out
' lpfnInternetCallback : WINHTTP_STATUS_CALLBACK
' dwNotificationFlags : DWORD
' dwReserved : UINT_PTR
Declare PtrSafe Function WinHttpSetStatusCallback Lib "winhttp" ( _
ByVal hInternet As LongPtr, _
ByVal lpfnInternetCallback As LongPtr, _
ByVal dwNotificationFlags As Long, _
ByVal dwReserved As LongPtr) As LongPtr
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
WinHttpSetStatusCallback = ctypes.windll.winhttp.WinHttpSetStatusCallback
WinHttpSetStatusCallback.restype = ctypes.c_void_p
WinHttpSetStatusCallback.argtypes = [
ctypes.POINTER(None), # hInternet : void* in/out
ctypes.c_void_p, # lpfnInternetCallback : WINHTTP_STATUS_CALLBACK
wintypes.DWORD, # dwNotificationFlags : DWORD
ctypes.c_size_t, # dwReserved : UINT_PTR
]
# GetLastError: use ctypes.GetLastError() (or ctypes.WinDLL(use_last_error=True))require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('WINHTTP.dll')
WinHttpSetStatusCallback = Fiddle::Function.new(
lib['WinHttpSetStatusCallback'],
[
Fiddle::TYPE_VOIDP, # hInternet : void* in/out
Fiddle::TYPE_VOIDP, # lpfnInternetCallback : WINHTTP_STATUS_CALLBACK
-Fiddle::TYPE_INT, # dwNotificationFlags : DWORD
Fiddle::TYPE_UINTPTR_T, # dwReserved : UINT_PTR
],
Fiddle::TYPE_VOIDP)#[link(name = "winhttp")]
extern "system" {
fn WinHttpSetStatusCallback(
hInternet: *mut (), // void* in/out
lpfnInternetCallback: *const core::ffi::c_void, // WINHTTP_STATUS_CALLBACK
dwNotificationFlags: u32, // DWORD
dwReserved: usize // UINT_PTR
) -> *const core::ffi::c_void;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("WINHTTP.dll", SetLastError = true)]
public static extern IntPtr WinHttpSetStatusCallback(IntPtr hInternet, IntPtr lpfnInternetCallback, uint dwNotificationFlags, UIntPtr dwReserved);
"@
$api = Add-Type -MemberDefinition $sig -Name 'WINHTTP_WinHttpSetStatusCallback' -Namespace Win32 -PassThru
# $api::WinHttpSetStatusCallback(hInternet, lpfnInternetCallback, dwNotificationFlags, dwReserved)#uselib "WINHTTP.dll"
#func global WinHttpSetStatusCallback "WinHttpSetStatusCallback" sptr, sptr, sptr, sptr
; WinHttpSetStatusCallback hInternet, lpfnInternetCallback, dwNotificationFlags, dwReserved ; 戻り値は stat
; hInternet : void* in/out -> "sptr"
; lpfnInternetCallback : WINHTTP_STATUS_CALLBACK -> "sptr"
; dwNotificationFlags : DWORD -> "sptr"
; dwReserved : UINT_PTR -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。#uselib "WINHTTP.dll"
#cfunc global WinHttpSetStatusCallback "WinHttpSetStatusCallback" sptr, sptr, int, sptr
; res = WinHttpSetStatusCallback(hInternet, lpfnInternetCallback, dwNotificationFlags, dwReserved)
; hInternet : void* in/out -> "sptr"
; lpfnInternetCallback : WINHTTP_STATUS_CALLBACK -> "sptr"
; dwNotificationFlags : DWORD -> "int"
; dwReserved : UINT_PTR -> "sptr"; WINHTTP_STATUS_CALLBACK WinHttpSetStatusCallback(void* hInternet, WINHTTP_STATUS_CALLBACK lpfnInternetCallback, DWORD dwNotificationFlags, UINT_PTR dwReserved)
#uselib "WINHTTP.dll"
#cfunc global WinHttpSetStatusCallback "WinHttpSetStatusCallback" intptr, intptr, int, intptr
; res = WinHttpSetStatusCallback(hInternet, lpfnInternetCallback, dwNotificationFlags, dwReserved)
; hInternet : void* in/out -> "intptr"
; lpfnInternetCallback : WINHTTP_STATUS_CALLBACK -> "intptr"
; dwNotificationFlags : DWORD -> "int"
; dwReserved : UINT_PTR -> "intptr"import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
winhttp = windows.NewLazySystemDLL("WINHTTP.dll")
procWinHttpSetStatusCallback = winhttp.NewProc("WinHttpSetStatusCallback")
)
// hInternet (void* in/out), lpfnInternetCallback (WINHTTP_STATUS_CALLBACK), dwNotificationFlags (DWORD), dwReserved (UINT_PTR)
r1, _, err := procWinHttpSetStatusCallback.Call(
uintptr(hInternet),
uintptr(lpfnInternetCallback),
uintptr(dwNotificationFlags),
uintptr(dwReserved),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // WINHTTP_STATUS_CALLBACKfunction WinHttpSetStatusCallback(
hInternet: Pointer; // void* in/out
lpfnInternetCallback: Pointer; // WINHTTP_STATUS_CALLBACK
dwNotificationFlags: DWORD; // DWORD
dwReserved: NativeUInt // UINT_PTR
): Pointer; stdcall;
external 'WINHTTP.dll' name 'WinHttpSetStatusCallback';result := DllCall("WINHTTP\WinHttpSetStatusCallback"
, "Ptr", hInternet ; void* in/out
, "Ptr", lpfnInternetCallback ; WINHTTP_STATUS_CALLBACK
, "UInt", dwNotificationFlags ; DWORD
, "UPtr", dwReserved ; UINT_PTR
, "Ptr") ; return: WINHTTP_STATUS_CALLBACK●WinHttpSetStatusCallback(hInternet, lpfnInternetCallback, dwNotificationFlags, dwReserved) = DLL("WINHTTP.dll", "void* WinHttpSetStatusCallback(void*, void*, dword, int)")
# 呼び出し: WinHttpSetStatusCallback(hInternet, lpfnInternetCallback, dwNotificationFlags, dwReserved)
# hInternet : void* in/out -> "void*"
# lpfnInternetCallback : WINHTTP_STATUS_CALLBACK -> "void*"
# dwNotificationFlags : DWORD -> "dword"
# dwReserved : UINT_PTR -> "int"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。