从OLE返回BSTR到Inno安装程序

时间:2018-10-07 11:15:57

标签: com inno-setup pascalscript

在使用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的正确类型是什么?如何将其转换为字符串?我应该手动释放它吗?

1 个答案:

答案 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;