Возврат BSTR из OLE в Inno Setup - PullRequest
       18

Возврат BSTR из OLE в Inno Setup

0 голосов
/ 07 октября 2018

В моей настройке, созданной с помощью 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 на стороне Паскаля?Как я могу преобразовать это в строку?Должен ли я отпустить его вручную?

1 Ответ

0 голосов
/ 07 октября 2018

На самом деле такого рода сигнатура метода преобразуется в функцию.По сути, метод имеет такую ​​подпись:

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;
...