在使用Inno Setup 5.x创建的设置中,我正在使用代码执行HTTP请求。
这是由WinHttpRequest
COM完成的。
虽然很容易将字符串参数传递给函数,但我在接收它们时遇到了麻烦。
例如函数GetResponseHeader
HRESULT GetResponseHeader(
[in] BSTR Header,
[out, retval] BSTR *Value
);
采用一个IN参数和一个OUT参数。
将空字符串传递给Value
导致抛出Invalid Variant Operation
。
在Pascal上[out, retval] BSTR *Value
的正确类型是什么?如何将其转换为字符串?我应该手动释放它吗?
答案 0 :(得分:4)
实际上,这种方法签名被转换为函数。实际上,该方法具有以下签名:
function GetResponseHeader(Header: string): string;
因此您可以这样做:
var
WinHttpReq: Variant;
ContentType: string;
begin
WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
WinHttpReq.Open('GET', 'https://www.example.com/', False);
WinHttpReq.Send();
ContentType := WinHttpReq.GetResponseHeader('Content-Type');
Log(ContentType);
end;