WinHttpGetProxyForUrlEx
関数シグネチャ
// WINHTTP.dll
#include <windows.h>
DWORD WinHttpGetProxyForUrlEx(
void* hResolver,
LPCWSTR pcwszUrl,
WINHTTP_AUTOPROXY_OPTIONS* pAutoProxyOptions,
UINT_PTR pContext // optional
);パラメーター
| 名前 | 型 | 方向 | 説明 |
|---|---|---|---|
| hResolver | void* | in | WinHttpCreateProxyResolver 関数によって返された WinHTTP リゾルバー ハンドルです。 |
| pcwszUrl | LPCWSTR | in | プロキシ情報を決定する対象の URL を含む、null 終端の Unicode 文字列へのポインターです。 |
| pAutoProxyOptions | WINHTTP_AUTOPROXY_OPTIONS* | in | 使用する自動プロキシ オプションを指定する WINHTTP_AUTOPROXY_OPTIONS 構造体へのポインターです。 |
| pContext | UINT_PTR | inoptional | 完了コールバック関数に渡されるコンテキスト データです。 |
戻り値の型: DWORD
公式ドキュメント
指定された URL のプロキシ データを取得します。(WinHttpGetProxyForUrlEx)
戻り値
操作の結果を示すステータス コードです。
| 以下のコードが返される場合があります。 | 説明 |
|---|---|
| 操作は非同期に継続中です。 | |
| 指定された URL のプロキシが見つからない場合に WinHttpGetProxyForUrlEx によって返されます。 | |
| プロキシ自動構成 (PAC) ファイル内のスクリプト コードの実行中にエラーが発生しました。 | |
| 指定されたハンドルの種類が、この操作に対して正しくありません。 | |
| URL が無効です。 | |
| 操作がキャンセルされました。通常、これは操作の完了前に、要求が実行されていたハンドルが閉じられたために発生します。 | |
| PAC ファイルをダウンロードできませんでした。たとえば、PAC URL が参照するサーバーに到達できなかったか、サーバーが 404 NOT FOUND 応答を返した可能性があります。 | |
| PAC ファイルの URL に、"http:" または "https:" 以外のスキームが指定されています。 | |
| 要求された操作を完了するのに十分なメモリがありませんでした。(Windows エラー コード) |
解説(Remarks)
この関数は、HTTP 要求のプロキシ設定を自動構成するための Web Proxy Auto-Discovery (WPAD) プロトコルを実装します。WPAD プロトコルは、指定されたターゲット URL に使用するプロキシ サーバーを特定するスクリプトであるプロキシ自動構成 (PAC) ファイルをダウンロードします。PAC ファイルは通常、企業ネットワーク環境内の IT 部門によって展開されます。PAC ファイルの URL は明示的に指定することも、ローカル ネットワーク上の PAC ファイルの場所を自動的に検出するよう WinHttpGetProxyForUrlEx に指示することもできます。
WinHttpGetProxyForUrlEx は、ECMAScript ベースの PAC ファイルのみをサポートします。
WinHttpGetProxyForUrlEx は、URL ごとに呼び出す必要があります。これは、PAC ファイルが URL ごとに異なるプロキシ サーバーを返す可能性があるためです。これは、PAC ファイルにより、IT 部門がターゲット URL (lpcwszUrl パラメーターで指定) をプロキシ サーバー配列内の特定のプロキシにマッピング (ハッシュ) することで、プロキシ サーバーの負荷分散を実装できるため有用です。
WinHttpGetProxyForUrlEx は、pAutoProxyOptions 構造体の dwFlags メンバーで自動検出が指定されている場合に、自動プロキシ URL と自動プロキシ スクリプトをキャッシュします。詳細については、自動プロキシ キャッシュを参照してください。
WinHttpGetProxyForUrlEx は、WinHttpGetProxyForUrl では提供されない、完全に非同期かつキャンセル可能な API を提供します。また、WinHttpGetProxyForUrlEx は PAC スクリプトによって返された完全なプロキシ リストをアプリケーションに提供するため、アプリケーションは "DIRECT" へのフェールオーバーをより適切に処理でき、必要に応じて SOCKS を理解できます。
WinHttpGetProxyForUrlEx は常に非同期に実行され、成功した場合は直ちに ERROR_IO_PENDING を返します。コールバックは、WinHttpOpen によって提供される hSession に対して WinHttpSetStatusCallback を呼び出すことで設定されます。あるいは、WinHttpCreateProxyResolver によって提供される hResolver に対して WinHttpSetStatusCallback を呼び出すことで、呼び出しごとに固有のコールバックを設定できます。
WinHttpSetStatusCallback は、WinHttpCreateProxyResolver の前に呼び出す必要があります。WinHttpSetStatusCallback を呼び出す際は、WINHTTP_CALLBACK_FLAG_REQUEST_ERROR | WINHTTP_CALLBACK_FLAG_GETPROXYFORURL_COMPLETE を使用してください。コールバックの使用方法については、WINHTTP_STATUS_CALLBACK を参照してください。
ステータス WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE のコールバックが返されると、アプリケーションは WinHttpGetProxyForUrlEx の発行に使用したリゾルバー ハンドルに対して WinHttpGetProxyResult を呼び出して、その呼び出しの結果を受け取ることができます。
ERROR_IO_PENDING を返した後に呼び出しが失敗した場合は、WINHTTP_CALLBACK_STATUS_REQUEST_ERROR のコールバックが発行されます。
この関数は常にプロセス外で実行されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での呼び出し定義
// WINHTTP.dll
#include <windows.h>
DWORD WinHttpGetProxyForUrlEx(
void* hResolver,
LPCWSTR pcwszUrl,
WINHTTP_AUTOPROXY_OPTIONS* pAutoProxyOptions,
UINT_PTR pContext // optional
);[DllImport("WINHTTP.dll", ExactSpelling = true)]
static extern uint WinHttpGetProxyForUrlEx(
IntPtr hResolver, // void*
[MarshalAs(UnmanagedType.LPWStr)] string pcwszUrl, // LPCWSTR
IntPtr pAutoProxyOptions, // WINHTTP_AUTOPROXY_OPTIONS*
UIntPtr pContext // UINT_PTR optional
);<DllImport("WINHTTP.dll", ExactSpelling:=True)>
Public Shared Function WinHttpGetProxyForUrlEx(
hResolver As IntPtr, ' void*
<MarshalAs(UnmanagedType.LPWStr)> pcwszUrl As String, ' LPCWSTR
pAutoProxyOptions As IntPtr, ' WINHTTP_AUTOPROXY_OPTIONS*
pContext As UIntPtr ' UINT_PTR optional
) As UInteger
End Function' hResolver : void*
' pcwszUrl : LPCWSTR
' pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS*
' pContext : UINT_PTR optional
Declare PtrSafe Function WinHttpGetProxyForUrlEx Lib "winhttp" ( _
ByVal hResolver As LongPtr, _
ByVal pcwszUrl As LongPtr, _
ByVal pAutoProxyOptions As LongPtr, _
ByVal pContext As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
WinHttpGetProxyForUrlEx = ctypes.windll.winhttp.WinHttpGetProxyForUrlEx
WinHttpGetProxyForUrlEx.restype = wintypes.DWORD
WinHttpGetProxyForUrlEx.argtypes = [
ctypes.POINTER(None), # hResolver : void*
wintypes.LPCWSTR, # pcwszUrl : LPCWSTR
ctypes.c_void_p, # pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS*
ctypes.c_size_t, # pContext : UINT_PTR optional
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('WINHTTP.dll')
WinHttpGetProxyForUrlEx = Fiddle::Function.new(
lib['WinHttpGetProxyForUrlEx'],
[
Fiddle::TYPE_VOIDP, # hResolver : void*
Fiddle::TYPE_VOIDP, # pcwszUrl : LPCWSTR
Fiddle::TYPE_VOIDP, # pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS*
Fiddle::TYPE_UINTPTR_T, # pContext : UINT_PTR optional
],
-Fiddle::TYPE_INT)#[link(name = "winhttp")]
extern "system" {
fn WinHttpGetProxyForUrlEx(
hResolver: *mut (), // void*
pcwszUrl: *const u16, // LPCWSTR
pAutoProxyOptions: *mut WINHTTP_AUTOPROXY_OPTIONS, // WINHTTP_AUTOPROXY_OPTIONS*
pContext: usize // UINT_PTR optional
) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("WINHTTP.dll")]
public static extern uint WinHttpGetProxyForUrlEx(IntPtr hResolver, [MarshalAs(UnmanagedType.LPWStr)] string pcwszUrl, IntPtr pAutoProxyOptions, UIntPtr pContext);
"@
$api = Add-Type -MemberDefinition $sig -Name 'WINHTTP_WinHttpGetProxyForUrlEx' -Namespace Win32 -PassThru
# $api::WinHttpGetProxyForUrlEx(hResolver, pcwszUrl, pAutoProxyOptions, pContext)#uselib "WINHTTP.dll"
#func global WinHttpGetProxyForUrlEx "WinHttpGetProxyForUrlEx" sptr, sptr, sptr, sptr
; WinHttpGetProxyForUrlEx hResolver, pcwszUrl, varptr(pAutoProxyOptions), pContext ; 戻り値は stat
; hResolver : void* -> "sptr"
; pcwszUrl : LPCWSTR -> "sptr"
; pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS* -> "sptr"
; pContext : UINT_PTR optional -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。#uselib "WINHTTP.dll" #cfunc global WinHttpGetProxyForUrlEx "WinHttpGetProxyForUrlEx" sptr, wstr, var, sptr ; res = WinHttpGetProxyForUrlEx(hResolver, pcwszUrl, pAutoProxyOptions, pContext) ; hResolver : void* -> "sptr" ; pcwszUrl : LPCWSTR -> "wstr" ; pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS* -> "var" ; pContext : UINT_PTR optional -> "sptr" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "WINHTTP.dll" #cfunc global WinHttpGetProxyForUrlEx "WinHttpGetProxyForUrlEx" sptr, wstr, sptr, sptr ; res = WinHttpGetProxyForUrlEx(hResolver, pcwszUrl, varptr(pAutoProxyOptions), pContext) ; hResolver : void* -> "sptr" ; pcwszUrl : LPCWSTR -> "wstr" ; pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS* -> "sptr" ; pContext : UINT_PTR optional -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
; DWORD WinHttpGetProxyForUrlEx(void* hResolver, LPCWSTR pcwszUrl, WINHTTP_AUTOPROXY_OPTIONS* pAutoProxyOptions, UINT_PTR pContext) #uselib "WINHTTP.dll" #cfunc global WinHttpGetProxyForUrlEx "WinHttpGetProxyForUrlEx" intptr, wstr, var, intptr ; res = WinHttpGetProxyForUrlEx(hResolver, pcwszUrl, pAutoProxyOptions, pContext) ; hResolver : void* -> "intptr" ; pcwszUrl : LPCWSTR -> "wstr" ; pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS* -> "var" ; pContext : UINT_PTR optional -> "intptr" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; DWORD WinHttpGetProxyForUrlEx(void* hResolver, LPCWSTR pcwszUrl, WINHTTP_AUTOPROXY_OPTIONS* pAutoProxyOptions, UINT_PTR pContext) #uselib "WINHTTP.dll" #cfunc global WinHttpGetProxyForUrlEx "WinHttpGetProxyForUrlEx" intptr, wstr, intptr, intptr ; res = WinHttpGetProxyForUrlEx(hResolver, pcwszUrl, varptr(pAutoProxyOptions), pContext) ; hResolver : void* -> "intptr" ; pcwszUrl : LPCWSTR -> "wstr" ; pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS* -> "intptr" ; pContext : UINT_PTR optional -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
winhttp = windows.NewLazySystemDLL("WINHTTP.dll")
procWinHttpGetProxyForUrlEx = winhttp.NewProc("WinHttpGetProxyForUrlEx")
)
// hResolver (void*), pcwszUrl (LPCWSTR), pAutoProxyOptions (WINHTTP_AUTOPROXY_OPTIONS*), pContext (UINT_PTR optional)
r1, _, err := procWinHttpGetProxyForUrlEx.Call(
uintptr(hResolver),
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pcwszUrl))),
uintptr(pAutoProxyOptions),
uintptr(pContext),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // DWORDfunction WinHttpGetProxyForUrlEx(
hResolver: Pointer; // void*
pcwszUrl: PWideChar; // LPCWSTR
pAutoProxyOptions: Pointer; // WINHTTP_AUTOPROXY_OPTIONS*
pContext: NativeUInt // UINT_PTR optional
): DWORD; stdcall;
external 'WINHTTP.dll' name 'WinHttpGetProxyForUrlEx';result := DllCall("WINHTTP\WinHttpGetProxyForUrlEx"
, "Ptr", hResolver ; void*
, "WStr", pcwszUrl ; LPCWSTR
, "Ptr", pAutoProxyOptions ; WINHTTP_AUTOPROXY_OPTIONS*
, "UPtr", pContext ; UINT_PTR optional
, "UInt") ; return: DWORD●WinHttpGetProxyForUrlEx(hResolver, pcwszUrl, pAutoProxyOptions, pContext) = DLL("WINHTTP.dll", "dword WinHttpGetProxyForUrlEx(void*, char*, void*, int)")
# 呼び出し: WinHttpGetProxyForUrlEx(hResolver, pcwszUrl, pAutoProxyOptions, pContext)
# hResolver : void* -> "void*"
# pcwszUrl : LPCWSTR -> "char*"
# pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS* -> "void*"
# pContext : UINT_PTR optional -> "int"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。const std = @import("std");
extern "winhttp" fn WinHttpGetProxyForUrlEx(
hResolver: ?*anyopaque, // void*
pcwszUrl: [*c]const u16, // LPCWSTR
pAutoProxyOptions: [*c]WINHTTP_AUTOPROXY_OPTIONS, // WINHTTP_AUTOPROXY_OPTIONS*
pContext: usize // UINT_PTR optional
) callconv(std.os.windows.WINAPI) u32;proc WinHttpGetProxyForUrlEx(
hResolver: pointer, # void*
pcwszUrl: WideCString, # LPCWSTR
pAutoProxyOptions: ptr WINHTTP_AUTOPROXY_OPTIONS, # WINHTTP_AUTOPROXY_OPTIONS*
pContext: uint # UINT_PTR optional
): uint32 {.importc: "WinHttpGetProxyForUrlEx", stdcall, dynlib: "WINHTTP.dll".}pragma(lib, "winhttp");
extern(Windows)
uint WinHttpGetProxyForUrlEx(
void* hResolver, // void*
const(wchar)* pcwszUrl, // LPCWSTR
WINHTTP_AUTOPROXY_OPTIONS* pAutoProxyOptions, // WINHTTP_AUTOPROXY_OPTIONS*
size_t pContext // UINT_PTR optional
);ccall((:WinHttpGetProxyForUrlEx, "WINHTTP.dll"), stdcall, UInt32,
(Ptr{Cvoid}, Cwstring, Ptr{WINHTTP_AUTOPROXY_OPTIONS}, Csize_t),
hResolver, pcwszUrl, pAutoProxyOptions, pContext)
# hResolver : void* -> Ptr{Cvoid}
# pcwszUrl : LPCWSTR -> Cwstring
# pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS* -> Ptr{WINHTTP_AUTOPROXY_OPTIONS}
# pContext : UINT_PTR optional -> Csize_t
# stdcall は 32bit のみ意味を持つ(x64 では無視)。local ffi = require("ffi")
ffi.cdef[[
uint32_t WinHttpGetProxyForUrlEx(
void* hResolver,
const uint16_t* pcwszUrl,
void* pAutoProxyOptions,
uintptr_t pContext);
]]
local winhttp = ffi.load("winhttp")
-- winhttp.WinHttpGetProxyForUrlEx(hResolver, pcwszUrl, pAutoProxyOptions, pContext)
-- hResolver : void*
-- pcwszUrl : LPCWSTR
-- pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS*
-- pContext : UINT_PTR optional
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。const koffi = require('koffi');
const lib = koffi.load('WINHTTP.dll');
const WinHttpGetProxyForUrlEx = lib.func('__stdcall', 'WinHttpGetProxyForUrlEx', 'uint32_t', ['void *', 'str16', 'void *', 'uintptr_t']);
// WinHttpGetProxyForUrlEx(hResolver, pcwszUrl, pAutoProxyOptions, pContext)
// hResolver : void* -> 'void *'
// pcwszUrl : LPCWSTR -> 'str16'
// pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS* -> 'void *'
// pContext : UINT_PTR optional -> 'uintptr_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。const lib = Deno.dlopen("WINHTTP.dll", {
WinHttpGetProxyForUrlEx: { parameters: ["pointer", "buffer", "pointer", "usize"], result: "u32" },
});
// lib.symbols.WinHttpGetProxyForUrlEx(hResolver, pcwszUrl, pAutoProxyOptions, pContext)
// hResolver : void* -> "pointer"
// pcwszUrl : LPCWSTR -> "buffer"
// pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS* -> "pointer"
// pContext : UINT_PTR optional -> "usize"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。<?php
$ffi = FFI::cdef(<<<C
uint32_t WinHttpGetProxyForUrlEx(
void* hResolver,
const uint16_t* pcwszUrl,
void* pAutoProxyOptions,
size_t pContext);
C, "WINHTTP.dll");
// $ffi->WinHttpGetProxyForUrlEx(hResolver, pcwszUrl, pAutoProxyOptions, pContext);
// hResolver : void*
// pcwszUrl : LPCWSTR
// pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS*
// pContext : UINT_PTR optional
// 構造体/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);
int WinHttpGetProxyForUrlEx(
Pointer hResolver, // void*
WString pcwszUrl, // LPCWSTR
Pointer pAutoProxyOptions, // WINHTTP_AUTOPROXY_OPTIONS*
long pContext // UINT_PTR optional
);
}@[Link("winhttp")]
lib LibWINHTTP
fun WinHttpGetProxyForUrlEx = WinHttpGetProxyForUrlEx(
hResolver : Void*, # void*
pcwszUrl : UInt16*, # LPCWSTR
pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS*, # WINHTTP_AUTOPROXY_OPTIONS*
pContext : LibC::SizeT # UINT_PTR optional
) : UInt32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。import 'dart:ffi';
import 'package:ffi/ffi.dart';
typedef WinHttpGetProxyForUrlExNative = Uint32 Function(Pointer<Void>, Pointer<Utf16>, Pointer<Void>, UintPtr);
typedef WinHttpGetProxyForUrlExDart = int Function(Pointer<Void>, Pointer<Utf16>, Pointer<Void>, int);
final WinHttpGetProxyForUrlEx = DynamicLibrary.open('WINHTTP.dll')
.lookupFunction<WinHttpGetProxyForUrlExNative, WinHttpGetProxyForUrlExDart>('WinHttpGetProxyForUrlEx');
// hResolver : void* -> Pointer<Void>
// pcwszUrl : LPCWSTR -> Pointer<Utf16>
// pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS* -> Pointer<Void>
// pContext : UINT_PTR optional -> UintPtr
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。{$mode objfpc}{$H+}
function WinHttpGetProxyForUrlEx(
hResolver: Pointer; // void*
pcwszUrl: PWideChar; // LPCWSTR
pAutoProxyOptions: Pointer; // WINHTTP_AUTOPROXY_OPTIONS*
pContext: NativeUInt // UINT_PTR optional
): DWORD; stdcall;
external 'WINHTTP.dll' name 'WinHttpGetProxyForUrlEx';import Foreign
import Foreign.C.Types
import Foreign.C.String
foreign import stdcall safe "WinHttpGetProxyForUrlEx"
c_WinHttpGetProxyForUrlEx :: Ptr () -> CWString -> Ptr () -> CUIntPtr -> IO Word32
-- hResolver : void* -> Ptr ()
-- pcwszUrl : LPCWSTR -> CWString
-- pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS* -> Ptr ()
-- pContext : UINT_PTR optional -> CUIntPtr
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。open Ctypes
open Foreign
let winhttpgetproxyforurlex =
foreign "WinHttpGetProxyForUrlEx"
((ptr void) @-> (ptr uint16_t) @-> (ptr void) @-> size_t @-> returning uint32_t)
(* hResolver : void* -> (ptr void) *)
(* pcwszUrl : LPCWSTR -> (ptr uint16_t) *)
(* pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS* -> (ptr void) *)
(* pContext : UINT_PTR optional -> size_t *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)(cffi:define-foreign-library winhttp (t "WINHTTP.dll"))
(cffi:use-foreign-library winhttp)
(cffi:defcfun ("WinHttpGetProxyForUrlEx" win-http-get-proxy-for-url-ex :convention :stdcall) :uint32
(h-resolver :pointer) ; void*
(pcwsz-url (:string :encoding :utf-16le)) ; LPCWSTR
(p-auto-proxy-options :pointer) ; WINHTTP_AUTOPROXY_OPTIONS*
(p-context :uint64)) ; UINT_PTR optional
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。use Win32::API;
my $WinHttpGetProxyForUrlEx = Win32::API::More->new('WINHTTP',
'DWORD WinHttpGetProxyForUrlEx(LPVOID hResolver, LPCWSTR pcwszUrl, LPVOID pAutoProxyOptions, WPARAM pContext)');
# my $ret = $WinHttpGetProxyForUrlEx->Call($hResolver, $pcwszUrl, $pAutoProxyOptions, $pContext);
# hResolver : void* -> LPVOID
# pcwszUrl : LPCWSTR -> LPCWSTR
# pAutoProxyOptions : WINHTTP_AUTOPROXY_OPTIONS* -> LPVOID
# pContext : UINT_PTR optional -> WPARAM
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。関連項目
- f WinHttpGetProxyForUrl — 指定URLに使用すべきプロキシ情報を取得する。
- f WinHttpGetProxyForUrlEx2 — 指定URLのプロキシ情報をインターフェイス指定で非同期取得する。