【问题标题】:Returning BSTR from OLE to Inno Setup将 BSTR 从 OLE 返回到 Inno Setup
【发布时间】:2018-10-07 11:15:57
【问题描述】:

在我使用 Inno Setup 5.x 创建的设置中,我使用代码执行 HTTP 请求。

这是由WinHttpRequest COM 完成的。

虽然将字符串参数传递给函数相当容易,但我无法接收它们。

例如函数GetResponseHeader

HRESULT GetResponseHeader(
  [in]          BSTR Header,
  [out, retval] BSTR *Value
);

接受一个 IN 参数和一个 OUT 参数。

将空字符串传递给Value 会导致Invalid Variant Operation 被抛出。

[out, retval] BSTR *Value 在 Pascal 端的正确类型是什么?如何将其转换为字符串?我应该手动释放它吗?

【问题讨论】:

    标签: com inno-setup pascalscript


    【解决方案1】:

    实际上这种方法签名被转换为一个函数。实际上,该方法具有以下签名:

    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;
    

    【讨论】:

    • 最后我在文档中找到了以下句子:Be aware that automation clients, such as script, get the header data as the return value of the function call, not through a function parameter.,但不想在测试前发布答案。对了,如果你是WinSCP的作者,我感到很荣幸。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多