Возврат BSTR из OLE в Inno Setup
В моей настройке, созданной с помощью 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 ответ
Решение
На самом деле такого рода сигнатура метода преобразуется в функцию. По сути, метод имеет такую подпись:
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;