WinHttpOpen
関数シグネチャ
// WINHTTP.dll
#include <windows.h>
void* WinHttpOpen(
LPCWSTR pszAgentW, // optional
WINHTTP_ACCESS_TYPE dwAccessType,
LPCWSTR pszProxyW, // optional
LPCWSTR pszProxyBypassW, // optional
DWORD dwFlags
);パラメーター
| 名前 | 型 | 方向 | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| pszAgentW | LPCWSTR | inoptional | WinHTTP 関数を呼び出すアプリケーションまたはエンティティの名前を含む文字列変数へのポインターです。この名前は HTTP プロトコルにおける ユーザーエージェント として使用されます。 | ||||||||||
| dwAccessType | WINHTTP_ACCESS_TYPE | in | 必要なアクセスの種類です。次のいずれかの値を指定できます。
| ||||||||||
| pszProxyW | LPCWSTR | inoptional | dwAccessType を WINHTTP_ACCESS_TYPE_NAMED_PROXY に設定してプロキシアクセスを指定する場合に使用するプロキシサーバーの名前を含む文字列変数へのポインターです。WinHTTP 関数は HTTP に対して CERN タイプのプロキシのみを認識します。 dwAccessType が WINHTTP_ACCESS_TYPE_NAMED_PROXY に設定されていない場合、このパラメーターには WINHTTP_NO_PROXY_NAME を設定する必要があります。 | ||||||||||
| pszProxyBypassW | LPCWSTR | inoptional | dwAccessType が WINHTTP_ACCESS_TYPE_NAMED_PROXY に設定されている場合に、プロキシ経由でルーティングすべきでないホスト名や IP アドレス(またはその両方)を、セミコロン区切りで列挙したオプションのリストを含む文字列変数へのポインターです。このリストにはワイルドカード文字を含めることができます。 WinHttpOpen 関数は空の文字列をプロキシバイパスリストとして使用するため、空の文字列を使用しないでください。このパラメーターでリスト内の唯一の項目として「<local>」マクロを指定した場合、この関数はピリオドを含まないホスト名をすべてバイパスします。 dwAccessType が WINHTTP_ACCESS_TYPE_NAMED_PROXY に設定されていない場合、このパラメーターには WINHTTP_NO_PROXY_BYPASS を設定する必要があります。 | ||||||||||
| dwFlags | DWORD | in | この関数の動作に影響を与えるさまざまなオプションを示すフラグを含む符号なし long 整数値です。このパラメーターには次の値を指定できます。
|
戻り値の型: void*
公式ドキュメント
アプリケーションにおける WinHTTP 関数の使用を初期化し、WinHTTP セッションハンドルを返します。
戻り値
成功した場合は有効なセッションハンドルを、それ以外の場合は NULL を返します。拡張エラー情報を取得するには、 GetLastError を呼び出します。返されるエラーコードには次のものがあります。
| エラーコード | 説明 |
|---|---|
| 内部エラーが発生しました。 | |
| 要求された操作を完了するために十分なメモリがありませんでした。(Windows エラーコード) |
解説(Remarks)
WinHTTP は非同期モードで使用することを強くお勧めします(つまり、WinHttpOpen で WINHTTP_FLAG_ASYNC を設定し、返された HINTERNET の使用が非同期になるようにします)。戻り値は成功または失敗を示します。拡張エラー情報を取得するには、 GetLastError を呼び出します。
WinHttpOpen 関数は、アプリケーションが呼び出す最初の WinHTTP 関数です。WinHTTP の内部データ構造を初期化し、アプリケーションからの以降の呼び出しに備えます。アプリケーションが WinHTTP 関数の使用を終えたら、 WinHttpCloseHandle を呼び出して、セッションハンドルおよび関連するリソースを解放する必要があります。
アプリケーションは WinHttpOpen を何回でも呼び出すことができますが、通常は 1 回の呼び出しで十分です。 WinHttpOpen を呼び出すたびに、新しいセッションコンテキストが開かれます。ユーザーデータは複数のセッションコンテキスト間で共有されないため、複数のユーザーに代わってリクエストを行うアプリケーションは、ユーザー固有の Cookie や認証状態を共有しないように、ユーザーごとに個別のセッションを作成する必要があります。アプリケーションは、ユーザーごとに異なるプロキシサーバーを構成するなど、各 WinHttpOpen インスタンスに対して個別の動作を定義する必要があります。
呼び出し元のアプリケーションが WinHttpOpen によって返された HINTERNET ハンドルの使用を終えたら、 WinHttpCloseHandle 関数を使用してそれを閉じる必要があります。
例
次のサンプルコードは、既定の接続タイムアウト値を取得する方法を示しています。
DWORD data;
DWORD dwSize = sizeof(DWORD);
// Use WinHttpOpen to obtain an HINTERNET handle.
HINTERNET hSession = WinHttpOpen(L"A WinHTTP Example Program/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);
if (hSession)
{
// Use WinHttpQueryOption to retrieve internet options.
if (WinHttpQueryOption( hSession,
WINHTTP_OPTION_CONNECT_TIMEOUT,
&data, &dwSize))
{
printf("Connection timeout: %u ms\n\n",data);
}
else
{
printf( "Error %u in WinHttpQueryOption.\n",
GetLastError());
}
// When finished, release the HINTERNET handle.
WinHttpCloseHandle(hSession);
}
else
{
printf("Error %u in WinHttpOpen.\n", GetLastError());
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での呼び出し定義
// WINHTTP.dll
#include <windows.h>
void* WinHttpOpen(
LPCWSTR pszAgentW, // optional
WINHTTP_ACCESS_TYPE dwAccessType,
LPCWSTR pszProxyW, // optional
LPCWSTR pszProxyBypassW, // optional
DWORD dwFlags
);[DllImport("WINHTTP.dll", SetLastError = true, ExactSpelling = true)]
static extern IntPtr WinHttpOpen(
[MarshalAs(UnmanagedType.LPWStr)] string pszAgentW, // LPCWSTR optional
uint dwAccessType, // WINHTTP_ACCESS_TYPE
[MarshalAs(UnmanagedType.LPWStr)] string pszProxyW, // LPCWSTR optional
[MarshalAs(UnmanagedType.LPWStr)] string pszProxyBypassW, // LPCWSTR optional
uint dwFlags // DWORD
);<DllImport("WINHTTP.dll", SetLastError:=True, ExactSpelling:=True)>
Public Shared Function WinHttpOpen(
<MarshalAs(UnmanagedType.LPWStr)> pszAgentW As String, ' LPCWSTR optional
dwAccessType As UInteger, ' WINHTTP_ACCESS_TYPE
<MarshalAs(UnmanagedType.LPWStr)> pszProxyW As String, ' LPCWSTR optional
<MarshalAs(UnmanagedType.LPWStr)> pszProxyBypassW As String, ' LPCWSTR optional
dwFlags As UInteger ' DWORD
) As IntPtr
End Function' pszAgentW : LPCWSTR optional
' dwAccessType : WINHTTP_ACCESS_TYPE
' pszProxyW : LPCWSTR optional
' pszProxyBypassW : LPCWSTR optional
' dwFlags : DWORD
Declare PtrSafe Function WinHttpOpen Lib "winhttp" ( _
ByVal pszAgentW As LongPtr, _
ByVal dwAccessType As Long, _
ByVal pszProxyW As LongPtr, _
ByVal pszProxyBypassW As LongPtr, _
ByVal dwFlags As Long) As LongPtr
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
WinHttpOpen = ctypes.windll.winhttp.WinHttpOpen
WinHttpOpen.restype = ctypes.c_void_p
WinHttpOpen.argtypes = [
wintypes.LPCWSTR, # pszAgentW : LPCWSTR optional
wintypes.DWORD, # dwAccessType : WINHTTP_ACCESS_TYPE
wintypes.LPCWSTR, # pszProxyW : LPCWSTR optional
wintypes.LPCWSTR, # pszProxyBypassW : LPCWSTR optional
wintypes.DWORD, # dwFlags : DWORD
]
# GetLastError: use ctypes.GetLastError() (or ctypes.WinDLL(use_last_error=True))require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('WINHTTP.dll')
WinHttpOpen = Fiddle::Function.new(
lib['WinHttpOpen'],
[
Fiddle::TYPE_VOIDP, # pszAgentW : LPCWSTR optional
-Fiddle::TYPE_INT, # dwAccessType : WINHTTP_ACCESS_TYPE
Fiddle::TYPE_VOIDP, # pszProxyW : LPCWSTR optional
Fiddle::TYPE_VOIDP, # pszProxyBypassW : LPCWSTR optional
-Fiddle::TYPE_INT, # dwFlags : DWORD
],
Fiddle::TYPE_VOIDP)#[link(name = "winhttp")]
extern "system" {
fn WinHttpOpen(
pszAgentW: *const u16, // LPCWSTR optional
dwAccessType: u32, // WINHTTP_ACCESS_TYPE
pszProxyW: *const u16, // LPCWSTR optional
pszProxyBypassW: *const u16, // LPCWSTR optional
dwFlags: u32 // DWORD
) -> *mut ();
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("WINHTTP.dll", SetLastError = true)]
public static extern IntPtr WinHttpOpen([MarshalAs(UnmanagedType.LPWStr)] string pszAgentW, uint dwAccessType, [MarshalAs(UnmanagedType.LPWStr)] string pszProxyW, [MarshalAs(UnmanagedType.LPWStr)] string pszProxyBypassW, uint dwFlags);
"@
$api = Add-Type -MemberDefinition $sig -Name 'WINHTTP_WinHttpOpen' -Namespace Win32 -PassThru
# $api::WinHttpOpen(pszAgentW, dwAccessType, pszProxyW, pszProxyBypassW, dwFlags)#uselib "WINHTTP.dll"
#func global WinHttpOpen "WinHttpOpen" sptr, sptr, sptr, sptr, sptr
; WinHttpOpen pszAgentW, dwAccessType, pszProxyW, pszProxyBypassW, dwFlags ; 戻り値は stat
; pszAgentW : LPCWSTR optional -> "sptr"
; dwAccessType : WINHTTP_ACCESS_TYPE -> "sptr"
; pszProxyW : LPCWSTR optional -> "sptr"
; pszProxyBypassW : LPCWSTR optional -> "sptr"
; dwFlags : DWORD -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。#uselib "WINHTTP.dll"
#cfunc global WinHttpOpen "WinHttpOpen" wstr, int, wstr, wstr, int
; res = WinHttpOpen(pszAgentW, dwAccessType, pszProxyW, pszProxyBypassW, dwFlags)
; pszAgentW : LPCWSTR optional -> "wstr"
; dwAccessType : WINHTTP_ACCESS_TYPE -> "int"
; pszProxyW : LPCWSTR optional -> "wstr"
; pszProxyBypassW : LPCWSTR optional -> "wstr"
; dwFlags : DWORD -> "int"; void* WinHttpOpen(LPCWSTR pszAgentW, WINHTTP_ACCESS_TYPE dwAccessType, LPCWSTR pszProxyW, LPCWSTR pszProxyBypassW, DWORD dwFlags)
#uselib "WINHTTP.dll"
#cfunc global WinHttpOpen "WinHttpOpen" wstr, int, wstr, wstr, int
; res = WinHttpOpen(pszAgentW, dwAccessType, pszProxyW, pszProxyBypassW, dwFlags)
; pszAgentW : LPCWSTR optional -> "wstr"
; dwAccessType : WINHTTP_ACCESS_TYPE -> "int"
; pszProxyW : LPCWSTR optional -> "wstr"
; pszProxyBypassW : LPCWSTR optional -> "wstr"
; dwFlags : DWORD -> "int"import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
winhttp = windows.NewLazySystemDLL("WINHTTP.dll")
procWinHttpOpen = winhttp.NewProc("WinHttpOpen")
)
// pszAgentW (LPCWSTR optional), dwAccessType (WINHTTP_ACCESS_TYPE), pszProxyW (LPCWSTR optional), pszProxyBypassW (LPCWSTR optional), dwFlags (DWORD)
r1, _, err := procWinHttpOpen.Call(
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pszAgentW))),
uintptr(dwAccessType),
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pszProxyW))),
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pszProxyBypassW))),
uintptr(dwFlags),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // void*function WinHttpOpen(
pszAgentW: PWideChar; // LPCWSTR optional
dwAccessType: DWORD; // WINHTTP_ACCESS_TYPE
pszProxyW: PWideChar; // LPCWSTR optional
pszProxyBypassW: PWideChar; // LPCWSTR optional
dwFlags: DWORD // DWORD
): Pointer; stdcall;
external 'WINHTTP.dll' name 'WinHttpOpen';result := DllCall("WINHTTP\WinHttpOpen"
, "WStr", pszAgentW ; LPCWSTR optional
, "UInt", dwAccessType ; WINHTTP_ACCESS_TYPE
, "WStr", pszProxyW ; LPCWSTR optional
, "WStr", pszProxyBypassW ; LPCWSTR optional
, "UInt", dwFlags ; DWORD
, "Ptr") ; return: void*●WinHttpOpen(pszAgentW, dwAccessType, pszProxyW, pszProxyBypassW, dwFlags) = DLL("WINHTTP.dll", "void* WinHttpOpen(char*, dword, char*, char*, dword)")
# 呼び出し: WinHttpOpen(pszAgentW, dwAccessType, pszProxyW, pszProxyBypassW, dwFlags)
# pszAgentW : LPCWSTR optional -> "char*"
# dwAccessType : WINHTTP_ACCESS_TYPE -> "dword"
# pszProxyW : LPCWSTR optional -> "char*"
# pszProxyBypassW : LPCWSTR optional -> "char*"
# dwFlags : DWORD -> "dword"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。const std = @import("std");
extern "winhttp" fn WinHttpOpen(
pszAgentW: [*c]const u16, // LPCWSTR optional
dwAccessType: u32, // WINHTTP_ACCESS_TYPE
pszProxyW: [*c]const u16, // LPCWSTR optional
pszProxyBypassW: [*c]const u16, // LPCWSTR optional
dwFlags: u32 // DWORD
) callconv(std.os.windows.WINAPI) ?*anyopaque;proc WinHttpOpen(
pszAgentW: WideCString, # LPCWSTR optional
dwAccessType: uint32, # WINHTTP_ACCESS_TYPE
pszProxyW: WideCString, # LPCWSTR optional
pszProxyBypassW: WideCString, # LPCWSTR optional
dwFlags: uint32 # DWORD
): pointer {.importc: "WinHttpOpen", stdcall, dynlib: "WINHTTP.dll".}pragma(lib, "winhttp");
extern(Windows)
void* WinHttpOpen(
const(wchar)* pszAgentW, // LPCWSTR optional
uint dwAccessType, // WINHTTP_ACCESS_TYPE
const(wchar)* pszProxyW, // LPCWSTR optional
const(wchar)* pszProxyBypassW, // LPCWSTR optional
uint dwFlags // DWORD
);ccall((:WinHttpOpen, "WINHTTP.dll"), stdcall, Ptr{Cvoid},
(Cwstring, UInt32, Cwstring, Cwstring, UInt32),
pszAgentW, dwAccessType, pszProxyW, pszProxyBypassW, dwFlags)
# pszAgentW : LPCWSTR optional -> Cwstring
# dwAccessType : WINHTTP_ACCESS_TYPE -> UInt32
# pszProxyW : LPCWSTR optional -> Cwstring
# pszProxyBypassW : LPCWSTR optional -> Cwstring
# dwFlags : DWORD -> UInt32
# stdcall は 32bit のみ意味を持つ(x64 では無視)。local ffi = require("ffi")
ffi.cdef[[
void* WinHttpOpen(
const uint16_t* pszAgentW,
uint32_t dwAccessType,
const uint16_t* pszProxyW,
const uint16_t* pszProxyBypassW,
uint32_t dwFlags);
]]
local winhttp = ffi.load("winhttp")
-- winhttp.WinHttpOpen(pszAgentW, dwAccessType, pszProxyW, pszProxyBypassW, dwFlags)
-- pszAgentW : LPCWSTR optional
-- dwAccessType : WINHTTP_ACCESS_TYPE
-- pszProxyW : LPCWSTR optional
-- pszProxyBypassW : LPCWSTR optional
-- dwFlags : DWORD
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。const koffi = require('koffi');
const lib = koffi.load('WINHTTP.dll');
const WinHttpOpen = lib.func('__stdcall', 'WinHttpOpen', 'void *', ['str16', 'uint32_t', 'str16', 'str16', 'uint32_t']);
// WinHttpOpen(pszAgentW, dwAccessType, pszProxyW, pszProxyBypassW, dwFlags)
// pszAgentW : LPCWSTR optional -> 'str16'
// dwAccessType : WINHTTP_ACCESS_TYPE -> 'uint32_t'
// pszProxyW : LPCWSTR optional -> 'str16'
// pszProxyBypassW : LPCWSTR optional -> 'str16'
// dwFlags : DWORD -> 'uint32_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。const lib = Deno.dlopen("WINHTTP.dll", {
WinHttpOpen: { parameters: ["buffer", "u32", "buffer", "buffer", "u32"], result: "pointer" },
});
// lib.symbols.WinHttpOpen(pszAgentW, dwAccessType, pszProxyW, pszProxyBypassW, dwFlags)
// pszAgentW : LPCWSTR optional -> "buffer"
// dwAccessType : WINHTTP_ACCESS_TYPE -> "u32"
// pszProxyW : LPCWSTR optional -> "buffer"
// pszProxyBypassW : LPCWSTR optional -> "buffer"
// dwFlags : DWORD -> "u32"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。<?php
$ffi = FFI::cdef(<<<C
void* WinHttpOpen(
const uint16_t* pszAgentW,
uint32_t dwAccessType,
const uint16_t* pszProxyW,
const uint16_t* pszProxyBypassW,
uint32_t dwFlags);
C, "WINHTTP.dll");
// $ffi->WinHttpOpen(pszAgentW, dwAccessType, pszProxyW, pszProxyBypassW, dwFlags);
// pszAgentW : LPCWSTR optional
// dwAccessType : WINHTTP_ACCESS_TYPE
// pszProxyW : LPCWSTR optional
// pszProxyBypassW : LPCWSTR optional
// dwFlags : DWORD
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
public interface Winhttp extends StdCallLibrary {
Winhttp INSTANCE = Native.load("winhttp", Winhttp.class);
Pointer WinHttpOpen(
WString pszAgentW, // LPCWSTR optional
int dwAccessType, // WINHTTP_ACCESS_TYPE
WString pszProxyW, // LPCWSTR optional
WString pszProxyBypassW, // LPCWSTR optional
int dwFlags // DWORD
);
}@[Link("winhttp")]
lib LibWINHTTP
fun WinHttpOpen = WinHttpOpen(
pszAgentW : UInt16*, # LPCWSTR optional
dwAccessType : UInt32, # WINHTTP_ACCESS_TYPE
pszProxyW : UInt16*, # LPCWSTR optional
pszProxyBypassW : UInt16*, # LPCWSTR optional
dwFlags : UInt32 # DWORD
) : Void*
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。import 'dart:ffi';
import 'package:ffi/ffi.dart';
typedef WinHttpOpenNative = Pointer<Void> Function(Pointer<Utf16>, Uint32, Pointer<Utf16>, Pointer<Utf16>, Uint32);
typedef WinHttpOpenDart = Pointer<Void> Function(Pointer<Utf16>, int, Pointer<Utf16>, Pointer<Utf16>, int);
final WinHttpOpen = DynamicLibrary.open('WINHTTP.dll')
.lookupFunction<WinHttpOpenNative, WinHttpOpenDart>('WinHttpOpen');
// pszAgentW : LPCWSTR optional -> Pointer<Utf16>
// dwAccessType : WINHTTP_ACCESS_TYPE -> Uint32
// pszProxyW : LPCWSTR optional -> Pointer<Utf16>
// pszProxyBypassW : LPCWSTR optional -> Pointer<Utf16>
// dwFlags : DWORD -> Uint32
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。{$mode objfpc}{$H+}
function WinHttpOpen(
pszAgentW: PWideChar; // LPCWSTR optional
dwAccessType: DWORD; // WINHTTP_ACCESS_TYPE
pszProxyW: PWideChar; // LPCWSTR optional
pszProxyBypassW: PWideChar; // LPCWSTR optional
dwFlags: DWORD // DWORD
): Pointer; stdcall;
external 'WINHTTP.dll' name 'WinHttpOpen';import Foreign
import Foreign.C.Types
import Foreign.C.String
foreign import stdcall safe "WinHttpOpen"
c_WinHttpOpen :: CWString -> Word32 -> CWString -> CWString -> Word32 -> IO (Ptr ())
-- pszAgentW : LPCWSTR optional -> CWString
-- dwAccessType : WINHTTP_ACCESS_TYPE -> Word32
-- pszProxyW : LPCWSTR optional -> CWString
-- pszProxyBypassW : LPCWSTR optional -> CWString
-- dwFlags : DWORD -> Word32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。open Ctypes
open Foreign
let winhttpopen =
foreign "WinHttpOpen"
((ptr uint16_t) @-> uint32_t @-> (ptr uint16_t) @-> (ptr uint16_t) @-> uint32_t @-> returning (ptr void))
(* pszAgentW : LPCWSTR optional -> (ptr uint16_t) *)
(* dwAccessType : WINHTTP_ACCESS_TYPE -> uint32_t *)
(* pszProxyW : LPCWSTR optional -> (ptr uint16_t) *)
(* pszProxyBypassW : LPCWSTR optional -> (ptr uint16_t) *)
(* dwFlags : DWORD -> uint32_t *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)(cffi:define-foreign-library winhttp (t "WINHTTP.dll"))
(cffi:use-foreign-library winhttp)
(cffi:defcfun ("WinHttpOpen" win-http-open :convention :stdcall) :pointer
(psz-agent-w (:string :encoding :utf-16le)) ; LPCWSTR optional
(dw-access-type :uint32) ; WINHTTP_ACCESS_TYPE
(psz-proxy-w (:string :encoding :utf-16le)) ; LPCWSTR optional
(psz-proxy-bypass-w (:string :encoding :utf-16le)) ; LPCWSTR optional
(dw-flags :uint32)) ; DWORD
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。use Win32::API;
my $WinHttpOpen = Win32::API::More->new('WINHTTP',
'LPVOID WinHttpOpen(LPCWSTR pszAgentW, DWORD dwAccessType, LPCWSTR pszProxyW, LPCWSTR pszProxyBypassW, DWORD dwFlags)');
# my $ret = $WinHttpOpen->Call($pszAgentW, $dwAccessType, $pszProxyW, $pszProxyBypassW, $dwFlags);
# pszAgentW : LPCWSTR optional -> LPCWSTR
# dwAccessType : WINHTTP_ACCESS_TYPE -> DWORD
# pszProxyW : LPCWSTR optional -> LPCWSTR
# pszProxyBypassW : LPCWSTR optional -> LPCWSTR
# dwFlags : DWORD -> DWORD
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。関連項目
- f WinHttpCloseHandle — WinHTTPハンドルを閉じてリソースを解放する。